home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MUSTWAHL.PAS *)
- (* Programm zur Zusammenstellung von Farb- und Muster- *)
- (* paletten für Turbo Pascal Version 4.0 *)
- (* (C) 1988 by Berthold Freier & PASCAL INTERNATIONAL *)
-
- PROGRAM musterwahl;
-
- USES Crt,Graph;
-
- CONST
- musterzahl = 12;
-
- TYPE (* Feld für die Belegungen *)
- feld = ARRAY [1..20,0..1] OF Word;
-
- VAR
- streifen : feld; (* Array der Belegungen *)
- xkoord, (* angepaßte Koordinate *)
- ykoord, (* angepaßte Koordinate *)
- wahl : INTEGER; (* gewählter Streifen *)
- farbenzahl, (* Gesamtzahl der mög- *)
- (* lichen Farben *)
- hintergrund, (* Wert für Hintergrund *)
- schreibfarbe : Word; (* aktuelle Schreibfarbe*)
- ch : CHAR; (* Tastatureingaben *)
- beenden, (* Schalter für Ende *)
- neustart : BOOLEAN; (* Schalter für Neustart*)
-
-
- (* Trubo-Graphik-Treiber initialisieren: *)
-
- PROCEDURE initialisierung (VAR xkoord,ykoord : INTEGER;
- VAR farbenzahl : Word);
-
- VAR
- GraphDriver,GraphMode : INTEGER;
-
-
- PROCEDURE Abort(Msg : STRING);
- BEGIN
- WriteLn(Msg, ': ', GraphErrorMsg(GraphResult));
- Halt(1);
- END;
-
-
- BEGIN
- (* Automatische Wahl des Grapik-Treibers: *)
- GraphDriver := Detect;
- (* Graphik initialisieren und die Dateien
- .BGI und .CHR im aktuellen Verzeichnis suchen: *)
- InitGraph(GraphDriver,GraphMode,'');
- IF GraphResult <> grOk THEN BEGIN
- WriteLn ('Fehler bei Initialisierung der Graphik :',
- GraphDriver);
- WriteLn ('Bitte RETURN drücken ');
- ReadLn; Halt;
- END;
- xkoord := (GetMaxX+1) DIV 320;
- ykoord := (GetMaxY+1) DIV 50;
- farbenzahl := GetMaxColor;
- END;
-
-
- PROCEDURE startwerte (VAR streifen : feld);
-
- VAR
- i : INTEGER;
-
- BEGIN (* Feld mit Mustern belegen *)
- FOR i := 1 TO 20 DO BEGIN
- streifen[i,0] := i MOD (musterzahl-1) +1;
- streifen[i,1] := i MOD farbenzahl +1;
- END;
- END;
-
-
- PROCEDURE titel (xkoord,ykoord : INTEGER;
- schreibfarbe : Word);
-
- BEGIN
- SetColor(schreibfarbe);
- SetTextStyle(TriplexFont,HorizDir,3);
- OutTextXY(xkoord*25,1,
- 'Programm zur Muster-Zusammenstellung');
- SetTextStyle(SmallFont,HorizDir,5);
- END;
-
-
- PROCEDURE erklaerung (VAR farbenzahl,hintergrund,
- schreibfarbe : Word;
- xkoord,ykoord : INTEGER);
-
- VAR
- s : STRING[2];
-
- BEGIN
- SetColor(1);
- SetTextStyle(SansSerifFont,HorizDir,1);
- OutTextXY(xkoord*25,ykoord*10,
- 'Dieses Programm hilft bei der Zusammenstellung von');
- OutTextXY(xkoord*25,ykoord*14,
- 'Muster-Paletten in Turbo Pascal. Die Funktionstasten');
- OutTextXY(xkoord*25,ykoord*18,
- 'steuern den Ablauf und werden aktuell angezeigt.');
- SetColor(1);
- OutTextXY(xkoord*25,ykoord*40,
- 'Geben Sie nun die Farbnummer des Hintergrunds ein .');
- Str(farbenzahl,s);
- SetColor(3);
- OutTextXY(xkoord*90,ykoord*44,
- 'Bitte nur Werte von 0 bis ');
- OutTextXY(xkoord*210,ykoord*44,s);
- REPEAT
- Read (hintergrund)
- UNTIL (hintergrund <= farbenzahl) AND (hintergrund > -1);
- IF hintergrund > 0 THEN BEGIN (* Festlegen der Schreibf.*)
- SetBkColor(hintergrund);
- SetPalette(hintergrund,0);
- SetPalette(0,hintergrund);
- schreibfarbe := hintergrund;(* eventuell mit 0 tausch.*)
- END
- ELSE BEGIN
- SetBkColor(0);
- schreibfarbe := farbenzahl;
- END;
- SetViewport(xkoord*0,ykoord*0,xkoord*320,ykoord*50,
- ClipOn);
- ClearViewPort;
- (* Ausgabe der Tastenbelegungen: *)
- SetColor(schreibfarbe);
- SetTextStyle(SmallFont,HorizDir,5);
- OutTextXY(xkoord*1,ykoord*44,'F1 = Pfeil nach links');
- OutTextXY(xkoord*100,ykoord*44,'F3 = Farbnummer hoeher');
- OutTextXY(xkoord*200,ykoord*44,'F4 = Musternummer hoeher');
- OutTextXY(xkoord*1,ykoord*46,'F2 = Pfeil nach rechts');
- OutTextXY(xkoord*100,ykoord*46,'F5 = Farbnummer tiefer');
- OutTextXY(xkoord*200,ykoord*46,'F6 = Musternummer tiefer');
- OutTextXY(xkoord*30,ykoord*48,
- 'F7 = Neustart des Programmes');
- OutTextXY(xkoord*170,ykoord*48,'F9 = Programm beenden');
- END;
-
-
- PROCEDURE ausgabe (streifen : feld;
- xkoord,ykoord,wahl : INTEGER);
-
- VAR
- s : STRING[2];
-
- BEGIN
- SetFillStyle(0,0);
- IF streifen[wahl,1] = hintergrund THEN s := '0'
- ELSE IF streifen[wahl,1] = 0 THEN Str(schreibfarbe,s)
- ELSE Str(streifen[wahl,1],s);
- Bar(wahl*xkoord*16-xkoord*12,ykoord*7,
- wahl*xkoord*16,ykoord*7+ykoord*2);
- OutTextXY(wahl*xkoord*16-xkoord*10,ykoord*7,s);
- Str(streifen[wahl,0],s);
- Bar(wahl*xkoord*16-xkoord*12,ykoord*38,
- wahl*xkoord*16,ykoord*38+ykoord*2);
- OutTextXY(wahl*xkoord*16-xkoord*10,ykoord*38,s);
- SetFillStyle(streifen[wahl,0],streifen[wahl,1]);
- Bar(wahl*xkoord*16-xkoord*16,ykoord*12,
- wahl*xkoord*16-xkoord*2,ykoord*37);
- END;
-
-
- PROCEDURE erstausgabe (streifen : feld;
- xkoord,ykoord : INTEGER);
-
- VAR
- i : INTEGER;
-
- BEGIN
- FOR i:=1 TO 20 DO BEGIN
- SetFillStyle(streifen[i,0],streifen[i,1]);
- Bar(i*xkoord*16-xkoord*16,ykoord*12,
- i*xkoord*16-xkoord*2,ykoord*37);
- END;
- SetColor(schreibfarbe);
- OutTextXY(xkoord*140,ykoord*5,'Farbnummern');
- OutTextXY(xkoord*140,ykoord*40,'Musternummern');
- FOR i:=1 TO 20 DO ausgabe(streifen,xkoord,ykoord,i);
- SetLineStyle(1,0,3); (* Linien zur Abteilung *)
- Line(0,ykoord*9+3,xkoord*320,ykoord*9+3);
- SetLineStyle(3,0,3);
- Line(0,ykoord*43,xkoord*320,ykoord*43);
- Line(0,ykoord*4,xkoord*320,ykoord*4);
- END;
-
-
- PROCEDURE pfeil (xkoord,ykoord,wahl : INTEGER;
- schreibfarbe : Word);
-
- BEGIN
- SetColor(schreibfarbe);
- MoveTo(wahl*xkoord*16-xkoord*14,ykoord*10);
- LineRel(xkoord*6,ykoord*1);
- LineRel(xkoord*6,-ykoord*1);
- LineTo(wahl*xkoord*16-xkoord*14,ykoord*10);
- END;
-
-
- PROCEDURE steuerung (ch : CHAR;
- VAR streifen : feld;
- VAR wahl : INTEGER);
-
- BEGIN
- CASE ch OF
- #59 : BEGIN (* Taste F1 *)
- pfeil(xkoord,ykoord,wahl,0);
- wahl := wahl-1;
- IF wahl = 0 THEN wahl := 20;
- pfeil(xkoord,ykoord,wahl,schreibfarbe);
- END;
- #60 : BEGIN (* Taste F2 *)
- pfeil(xkoord,ykoord,wahl,0);
- wahl := wahl+1;
- IF wahl = 21 THEN wahl:=1;
- pfeil(xkoord,ykoord,wahl,schreibfarbe);
- END;
- #61 : BEGIN (* Taste F3 *)
- streifen[wahl,1]:=streifen[wahl,1]+1;
- IF streifen[wahl,1]=16 THEN streifen[wahl,1]:=0;
- ausgabe(streifen,xkoord,ykoord,wahl);
- END;
- #63 : BEGIN (* Taste F5 *)
- IF streifen[wahl,1]=0 THEN streifen[wahl,1]:=16;
- streifen[wahl,1]:=streifen[wahl,1]-1;
- ausgabe(streifen,xkoord,ykoord,wahl);
- END;
- #62 : BEGIN (* Taste F4 *)
- streifen[wahl,0]:=streifen[wahl,0]+1;
- IF streifen[wahl,0]=musterzahl THEN
- streifen[wahl,0]:=0;
- ausgabe(streifen,xkoord,ykoord,wahl);
- END;
- #64 : BEGIN (* Taste F6 *)
- IF streifen[wahl,0]=0 THEN
- streifen[wahl,0]:=musterzahl;
- streifen[wahl,0]:=streifen[wahl,0]-1;
- ausgabe(streifen,xkoord,ykoord,wahl);
- END;
- #65 : BEGIN (* Taste F7 *)
- neustart:=TRUE;
- ClearDevice;
- END;
- #67 : BEGIN (* Taste F9 *)
- beenden:=TRUE;
- ClearDevice;
- CloseGraph;
- Halt;
- END;
- ELSE Write(#7); (* andere Taste *)
- END;
- END;
-
-
- PROCEDURE tastatur (VAR ch : CHAR; streifen : feld;
- wahl : INTEGER);
-
- BEGIN
- REPEAT
- ch := ReadKey;
- IF ch = #0 THEN BEGIN (* wenn Sondertaste, *)
- ch := ReadKey; (* dann weitergeben, *)
- steuerung (ch,streifen,wahl);
- END; (* ansonsten nichts ! *)
- UNTIL beenden OR neustart;
- END;
-
-
- BEGIN
- initialisierung(xkoord,ykoord,farbenzahl);
- beenden := FALSE;
- REPEAT
- neustart := FALSE;
- startwerte(streifen);
- titel(xkoord,ykoord,3);
- erklaerung(farbenzahl,schreibfarbe,hintergrund,
- xkoord,ykoord);
- titel(xkoord,ykoord,schreibfarbe);
- erstausgabe(streifen,xkoord,ykoord);
- SetLineStyle(0,0,1);
- wahl := 10;
- pfeil(xkoord,ykoord,wahl,schreibfarbe);
- tastatur(ch,streifen,wahl);
- UNTIL beenden;
- CloseGraph;
- END.