home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* EGACOL2.INC *)
- (* Include-Datei zu PALEDDI2.PAS für EGA-Karten *)
- (* Turbo Pascal Version ab 5.0 *)
- (* (c) 1990 Gerald Arend & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- CONST { Konstanten für Bit-Verknüpfungen }
- AndBits: ARRAY[1..6] OF BYTE = (1, 2, 4, 8, 16, 32);
- OrBits: ARRAY[1..6] OF BYTE = (62, 61, 59, 55, 47, 31);
-
- VAR
- EGAFarben: ARRAY[0..MaxColors] OF BYTE; { Palette }
- SchriftY: ARRAY[1..7] OF INTEGER;
- Step: BYTE;
- StepX, StepY, WertX, WertY: INTEGER;
- Ende: BOOLEAN;
- TBreite, THoehe: WORD;
-
- PROCEDURE DrawBars; { Farbbalken und Info erzeugen }
- VAR
- n, m: BYTE;
- s: STRING[4];
- CONST
- Bezeichnung: STRING[24] = '1:B+2:G+3:R+4:B-5:G-6:R-';
- BEGIN
- SetFillStyle(SolidFill, MaxColors);
- Bar(0, 0, GetMaxX, 2*TextHeight('X')-1);
- SetTextStyle(DefaultFont, HorizDir, 1);
- SetTextJustify(CenterText, TopText);
- SetColor(0);
- OutTextXY(GetMaxX DIV 2, 2, 'toolbox Pal-Eddi '+
- 'EGA-Modus 640 x 350, 16 Farben aus einer '+
- 'Palette von 64');
- SetTextJustify(LeftText, BottomText);
- SetColor(MaxColors);
- SetWriteMode(XORPut);
- TBreite:=TextWidth('X');
- THoehe:=TextHeight('X');
- FOR n:=1 TO 6 DO
- BEGIN
- SchriftY[n]:=GetMaxY DIV 2+(n+3)*THoehe*4 DIV 3;
- s:=Copy(Bezeichnung, Succ(Pred(n)*4), 4);
- OutTextXY(0, SchriftY[n], s);
- END;
- SchriftY[7]:=SchriftY[6]+2*THoehe;
- OutTextXY(0, SchriftY[7], 'Wert');
- OutTextXY(0, GetMaxY-4*THoehe,
- '<F1>...<F6> Bit umschalten');
- OutTextXY(0, GetMaxY-2*THoehe,
- #24#47#25+' Farbwert ändern');
- OutTextXY(GetMaxX DIV 2, GetMaxY-2*THoehe,
- '<C> Color-Cycling-Demo');
- OutTextXY(0, GetMaxY,
- '<S> Turbo-Pascal-Prozedur erzeugen');
- OutTextXY(0, SchriftY[1]-3*THoehe, 'Nr.');
- Step:=1;
- StepX:=GetMaxX DIV 2+13*TBreite;
- StepY:=GetMaxY-4*THoehe;
- OutTextXY(GetMaxX DIV 2, StepY,
- 'Schrittweite: <+> / <->');
- ShowValue(StepX, StepY, Step, 3);
- FOR n:=0 TO MaxColors DO
- BEGIN
- SetColor(MaxColors);
- Str(n:2, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[1]-3*THoehe, ' #'+s);
- FOR m:=1 TO 6 DO
- IF EGAFarben[n] AND AndBits[m]>0 THEN
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[m], ' 1')
- ELSE
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[m], ' 0');
- Str(EGAFarben[n]:3, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[7], s);
- SetColor(n);
- SetFillStyle(SolidFill, n);
- Bar(Succ(n)*GetMaxX DIV (MaxColors+2), 2*THoehe,
- (n+2)*GetMaxX DIV (MaxColors+2), GetMaxY div 2);
- END;
- END;
-
- PROCEDURE InitPalette; { Palette speichern }
- VAR
- n: BYTE;
- Palette: PaletteType;
- BEGIN
- GetPalette(Palette);
- FOR n:=0 TO MaxColors DO
- EGAFarben[n]:=Palette.Colors[n];
- END;
-
- PROCEDURE Palette2Disk; { Palette als Prozedur abspeichern }
- VAR
- n: BYTE;
- Datei: TEXT;
- CONST
- DateiName: STRING[12] = 'PALETTE.ASC';
- BEGIN
- {$I-}
- Assign(Datei, DateiName);
- Rewrite(Datei);
- {$I+}
- IF IOResult<>0 THEN
- BEGIN
- Write(^G);
- Exit;
- END;
- Writeln(Datei, 'PROCEDURE PaletteSetzen;');
- Writeln(Datei, 'CONST');
- Writeln(Datei, ' EGAFarben: PaletteType =');
- Writeln(Datei, ' (Size: 15;');
- Write(Datei, ' Colors: (');
- FOR n:=0 TO MaxColors DO
- BEGIN
- Write(Datei, EGAFarben[n]:2);
- IF n<MaxColors THEN
- Write(Datei, ', ')
- ELSE
- Writeln(Datei, '));');
- END;
- Writeln(Datei, 'BEGIN');
- Writeln(Datei, ' SetAllPalette(EGAFarben);');
- Writeln(Datei, 'END;');
- Writeln(Datei);
- Close(Datei);
- END;
-
- PROCEDURE ChangeColors; { Farben interaktiv verändern }
- VAR
- x: INTEGER;
- n, m: BYTE;
- ch: CHAR;
-
- PROCEDURE ToggleBit(VAR Wert: BYTE; Stelle: BYTE);
- { Ein einzelnes Bit umschalten }
- BEGIN
- IF Wert AND AndBits[Stelle]=0 THEN
- Wert:=Wert OR AndBits[Stelle]
- ELSE
- Wert:=Wert AND OrBits[Stelle];
- END;
-
- BEGIN
- n:=0;
- Ende:=FALSE;
- SetColor(MaxColors);
- DrawFrame(n, SchriftY[7]+10);
- REPEAT
- x:=Succ(n)*GetMaxX DIV (MaxColors+2)+TBreite;
- ch:=ReadKey;
- CASE ch OF
- #0: BEGIN
- ch:=ReadKey;
- CASE ch OF
- #75: BEGIN { <- }
- DrawFrame(n, SchriftY[7]+10);
- Add(n, 0, MaxColors, -1, TRUE);
- DrawFrame(n, SchriftY[7]+10);
- END;
- #77: BEGIN { -> }
- DrawFrame(n, SchriftY[7]+10);
- Add(n, 0, MaxColors, 1, TRUE);
- DrawFrame(n, SchriftY[7]+10);
- END;
- #72,
- #80: BEGIN
- IF ch=#72 THEN { ^ }
- Add(EGAFarben[n], 0, 63, -Step,
- TRUE)
- ELSE { v }
- Add(EGAFarben[n], 0, 63, Step,
- TRUE);
- { Farbwert anzeigen }
- ShowValue(x, SchriftY[7],
- EGAFarben[n], 2);
- FOR m:=1 TO 6 DO { Bits anzeigen }
- IF EGAFarben[n] AND AndBits[m]>0
- THEN
- ShowValue(x, SchriftY[m], 1, 2)
- ELSE
- ShowValue(x, SchriftY[m], 0, 2);
- END;
- #59..
- #64: BEGIN { F1...F6: Einzelne Bits togglen }
- m:=Ord(ch)-58;
- ToggleBit(EGAFarben[n], m);
- ShowValue(x, SchriftY[7],
- EGAFarben[n], 2);
- IF EGAFarben[n] AND AndBits[m]>0 THEN
- ShowValue(x, SchriftY[m], 1, 2)
- ELSE
- ShowValue(x, SchriftY[m], 0, 2);
- END;
- END;
- END;
- '+': BEGIN { Schrittweite erhöhen }
- Add(Step, 1, 8, 1, TRUE);
- ShowValue(StepX, StepY, Step, 3);
- END;
- '-': BEGIN { Schrittweite vermindern }
- Add(Step, 1, 8, -1, TRUE);
- ShowValue(StepX, StepY, Step, 3);
- END;
- 's',
- 'S': Palette2Disk;
- 'c',
- 'C': BEGIN
- CycleDemo;
- Exit;
- END;
- #27: BEGIN
- Ende:=TRUE;
- Exit;
- END;
- END;
- SetPalette(n, EGAFarben[n]); { Palette setzen }
- UNTIL FALSE;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von EGACOL2.INC *)