(********************************************************* * * :Program. Abfrage , gibt BOOLEAN zurück * :Author. Hans Schafft * :Address. Landfriedstraße 1A - Hinterhaus * :Address. 6900 Heidelberg * :Phone. 06221 - 22416 * :Version. 1.0 * :Date. 1990 * :Copyright. PD * :Language. Modula-II * :Translator. M2Amiga * *********************************************************************) IMPLEMENTATION MODULE Hilfen; FROM SYSTEM IMPORT ADR, ADDRESS, LONGSET; FROM Str IMPORT Copy,Length; FROM Exec IMPORT MemReqs, MemReqSet, WaitPort, ReplyMsg, GetMsg; FROM Graphics IMPORT jam2; FROM Intuition IMPORT GadgetPtr, WindowPtr,IntuiText,IntuiTextLength, IntuiMessagePtr, IDCMPFlags, IDCMPFlagSet, boolGadget, reqGadget, ActivationFlags,Request, ActivationFlagSet, Border, Gadget, GadgetFlagSet, Requester, RequesterFlagSet, InitRequester; CONST postext = "Wie schrecklich aufregend !"; negtext = "Außerordentlich interessant !"; XPosition = 10; YPosition = 30; Zeile1 = "Durch Klicken auf die Pfeile kann man die Zahl der Kästchen"; Zeile2 = "als auch die der Farben erhöhen oder vermindern."; Zeile3 = " "; Zeile4 = "Hat man seine WunschKonstellation erstellt, Klick auf 'SPIEL'."; Zeile5 = " "; Zeile6 = "Jetzt erscheint, wenn AnzahlDerFarben >= AnzahlDerKästchen,"; Zeile7 = "ein weiterer Requester, der fragt ob jede Farbe nur einmal"; Zeile8 = "oder mehrmals vorkommen darf. Hat man dies beantwortet, so"; Zeile9 = "beginnt das Spiel:"; Zeile10 = "Die noch unausgefüllten Kästchen erscheinen links oben."; Zeile11 = "Man wähle jetzt eine der Farben durch anklicken aus, - der Maus-"; Zeile12 = "Zeiger erhält die aktuelle Farbe - und setzte sie durch An-"; Zeile13 = "klicken in das gewünschte Kästchen. Hat man so alle Kistchen"; Zeile14 = "gefüllt, bitte das 'OK' Gadget betätigen."; Zeile15 = " "; Zeile16 = "Nun rückt alles eine Reihe nach unten und zwei Zahlen erscheinen."; Zeile17 = "Die erste heißt: Soviele Kästchen hast Du mit der richtigen Farbe"; Zeile18 = "gefüllt. Die zweite: Soviele Farben sind sonst noch richtig,"; Zeile19 = "allerdings leider nicht im richtigen Kästchen! Das Spiel ist"; Zeile20 = "beendet, wenn die erste Zahl gleich der Anzahl der Kisten ist."; Zeile21 = " "; Zeile22 = "Um den Beginn zu vereinfachen kann man auch direkt OK klicken."; Zeile23 = "Das hat beim MehrfachModus die Folge, daß in alle Kistchen die"; Zeile24 = "erste Farbe gesetzt wird, sonst werden die Farben der Reihe nach"; Zeile25 = "in die Kistchen gesetzt."; Zeile26 = " "; Zeile27 = "Kästchen,die nicht verändert werden sollen, brauchen nicht neu"; Zeile28 = "gefüllt zu werden. Ihre Farbe wird beim nächsten OK von der darunter"; Zeile29 = "liegenden Reihe übernommen."; Zeile30 = " "; Zeile31 = "VORSICHT! Klickt man während des Spiels 'NEU', wird alles gelöscht!"; Zeile32 = " "; Zeile33 = "Klickt man während des Spieles das 'Hilfe'-Gadget an, verfärbt"; Zeile34 = "sich der Bildschirm blau. Jeder Klick auf eines der Kästchen"; Zeile35 = "offenbart nun seine Farbe. Aus dem Hilfe - Modus kommt man nur"; Zeile36 = "durch erneutes Anklicken von 'HILFE' !!"; Zeile37 = " "; Zeile38 = "Die DruckerAusgabe kann durch erneutes Anwählen wieder ausge-"; Zeile39 = "schaltet werden."; Zeile40 = " "; Zeile41 = "Um die PfeilImages einzubinden habe ich IFFToCode von AMOK #3"; Zeile42 = "benutzt. Dem Autor Pit Burkhardt auf diesem Wege vielen Dank !"; Zeile43 = "§"; ReqTextFarbeVorne = 13; ReqTextFarbeHinten = 14; ReqBackFill = 14; ReqRandFarbe = 4; posGadTextFarbeVorne = 1; posGadTextFarbeHinten = 0; posGadRandFarbe = 3; negGadTextFarbeVorne = 1; negGadTextFarbeHinten = 0; negGadRandFarbe = 3; VAR RequBreite : INTEGER; RequHoehe : INTEGER; posGadBreite : INTEGER; negGadBreite : INTEGER; requester : Requester; posGadText : IntuiText; posGad : Gadget; posGadBorder : Border; posGadEcken : ARRAY [1..10] OF INTEGER; negGadText : IntuiText; negGad : Gadget; negGadBorder : Border; negGadEcken : ARRAY [1..10] OF INTEGER; ReqBorder : Border; ReqEcken : ARRAY [1..10] OF INTEGER; text : ARRAY [0..43],[0..75] OF CHAR; itext : ARRAY [0..43] OF IntuiText; (******************************************************************) PROCEDURE ZeigeHilfen(wiPtr : WindowPtr) : BOOLEAN; VAR gadPtr : GadgetPtr; gadNr : INTEGER; msgPtr : IntuiMessagePtr; class : IDCMPFlagSet; code : CARDINAL; ende,mode : BOOLEAN; BEGIN IF Request(ADR(requester),wiPtr) THEN ende := FALSE;mode := TRUE; REPEAT WaitPort(wiPtr^.userPort); LOOP msgPtr := GetMsg(wiPtr^.userPort); IF msgPtr=NIL THEN EXIT END; class := msgPtr^.class; code := msgPtr^.code; gadPtr:= msgPtr^.iAddress; gadNr := gadPtr^.gadgetID; ReplyMsg(msgPtr); IF (class = IDCMPFlagSet{gadgetUp}) THEN CASE gadNr OF | 1 : mode := TRUE; ende := TRUE; | 2 : mode := FALSE; ende := TRUE; ELSE END; END; IF ende THEN EXIT END; END; (* LOOP *) UNTIL ende; END; RETURN mode; END ZeigeHilfen; (******************************************************************) PROCEDURE RichteEinGadgetJa; BEGIN WITH posGadText DO leftEdge := 1; topEdge := 1; frontPen := posGadTextFarbeVorne; backPen := posGadTextFarbeHinten; drawMode := jam2; iText := ADR(postext); iTextFont:= NIL; nextText:= NIL; END; posGadBreite := IntuiTextLength(ADR(posGadText)); (* Koordinaten für den Rand der Gadget Box *) posGadEcken[1] := 0; posGadEcken[2] := 0; posGadEcken[3] := posGadBreite+2; posGadEcken[4] := 0; posGadEcken[5] := posGadBreite+2; posGadEcken[6] := 11; posGadEcken[7] := 0; posGadEcken[8] := 11; posGadEcken[9] := 0; posGadEcken[10]:= 0; WITH posGadBorder DO leftEdge := -1; topEdge := -1; frontPen := posGadRandFarbe; backPen := ReqBackFill; drawMode := jam2; count := 5; xy := ADR(posGadEcken); nextBorder := NIL; END; WITH posGad DO leftEdge := 10; topEdge := RequHoehe - 15; width := posGadBreite; height := 10; flags := GadgetFlagSet{}; activation := ActivationFlagSet{endGadget, relVerify}; gadgetType := boolGadget + reqGadget; gadgetRender := ADR(posGadBorder); gadgetText := ADR(posGadText); mutualExclude:= LONGSET{}; nextGadget := ADR(negGad); selectRender := NIL; specialInfo := NIL; userData := NIL; gadgetID := 1; END; END RichteEinGadgetJa; (******************************************************************) PROCEDURE RichteEinGadgetNein; BEGIN WITH negGadText DO leftEdge := 1; topEdge := 1; frontPen := negGadTextFarbeVorne; backPen := negGadTextFarbeHinten; drawMode := jam2; iText := ADR(negtext); iTextFont := NIL; nextText := NIL; END; negGadBreite := IntuiTextLength(ADR(negGadText)); (* Koordinaten für den Rand der Gadget Box *) negGadEcken[1] := 0; negGadEcken[2] := 0; negGadEcken[3] := negGadBreite+2; negGadEcken[4] := 0; negGadEcken[5] := negGadBreite+2; negGadEcken[6] := 11; negGadEcken[7] := 0; negGadEcken[8] := 11; negGadEcken[9] := 0; negGadEcken[10] := 0; WITH negGadBorder DO leftEdge := -1; topEdge := -1; frontPen := negGadRandFarbe; backPen := ReqBackFill; drawMode := jam2; count := 5; xy := ADR(negGadEcken); nextBorder := NIL; END; WITH negGad DO leftEdge := RequBreite - (negGadBreite + 14); topEdge := RequHoehe - 15; width := negGadBreite; height := 10; flags := GadgetFlagSet{}; activation := ActivationFlagSet{endGadget, relVerify}; gadgetType := boolGadget + reqGadget; gadgetRender := ADR(negGadBorder); gadgetText := ADR(negGadText); mutualExclude:= LONGSET{}; nextGadget := NIL; selectRender := NIL; specialInfo := NIL; userData := NIL; gadgetID := 2; END; END RichteEinGadgetNein; (******************************************************************) PROCEDURE RichteEinRequesterText; VAR x,y :CARDINAL; BEGIN Copy(text[43],"§"); RequBreite := 0; x := 0; REPEAT WITH itext[x] DO drawMode := jam2; iText := ADR(text[x]); iTextFont := NIL; nextText := ADR(itext[x+1]); topEdge := x*10; frontPen := ReqTextFarbeVorne; backPen := ReqTextFarbeHinten; END; IF RequBreite < IntuiTextLength(ADR(itext[x])) THEN RequBreite := IntuiTextLength(ADR(itext[x])); END; INC(x); UNTIL text[x,0] = "§"; RequHoehe := x*10 + 23; RequBreite := RequBreite + 40; itext[x-1].nextText := NIL; FOR y := 0 TO x-1 DO itext[y].leftEdge := (RequBreite - IntuiTextLength(ADR(itext[y]))) DIV 2; END; END RichteEinRequesterText; (******************************************************************) PROCEDURE RichteEinRequester; BEGIN RichteEinRequesterText; RichteEinGadgetJa; RichteEinGadgetNein; ReqEcken[1] := 0; ReqEcken[2] := 0; ReqEcken[3] := RequBreite-3; ReqEcken[4] := 0; ReqEcken[5] := RequBreite-3; ReqEcken[6] := RequHoehe-3; ReqEcken[7] := 0; ReqEcken[8] := RequHoehe-3; ReqEcken[9] := 0; ReqEcken[10] := 0; WITH ReqBorder DO leftEdge := 1; topEdge := 1; frontPen := ReqRandFarbe; backPen := ReqBackFill; drawMode := jam2; count := 5; xy := ADR(ReqEcken); nextBorder := NIL; END; InitRequester(ADR(requester)); WITH requester DO leftEdge := XPosition; topEdge := YPosition; width := RequBreite; height := RequHoehe; reqGadget := ADR(posGad); reqText := ADR(itext[0]); reqBorder := ADR(ReqBorder); backFill := ReqBackFill; END; END RichteEinRequester; (******************************************************************) (******************************************************************) BEGIN Copy(text[1],Zeile1); Copy(text[2],Zeile2); Copy(text[3],Zeile3); Copy(text[4],Zeile4); Copy(text[5],Zeile5); Copy(text[6],Zeile6); Copy(text[7],Zeile7); Copy(text[8],Zeile8); Copy(text[9],Zeile9); Copy(text[10],Zeile10); Copy(text[11],Zeile11); Copy(text[12],Zeile12); Copy(text[13],Zeile13); Copy(text[14],Zeile14); Copy(text[15],Zeile15); Copy(text[16],Zeile16); Copy(text[17],Zeile17); Copy(text[18],Zeile18); Copy(text[19],Zeile19); Copy(text[20],Zeile20); Copy(text[21],Zeile21); Copy(text[22],Zeile22); Copy(text[23],Zeile23); Copy(text[24],Zeile24); Copy(text[25],Zeile25); Copy(text[26],Zeile26); Copy(text[27],Zeile27); Copy(text[28],Zeile28); Copy(text[29],Zeile29); Copy(text[30],Zeile30); Copy(text[31],Zeile31); Copy(text[32],Zeile32); Copy(text[33],Zeile33); Copy(text[34],Zeile34); Copy(text[35],Zeile35); Copy(text[36],Zeile36); Copy(text[37],Zeile37); Copy(text[38],Zeile38); Copy(text[39],Zeile39); Copy(text[40],Zeile40); Copy(text[41],Zeile41); Copy(text[42],Zeile42); Copy(text[43],"§"); RichteEinRequester; END Hilfen.