home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
10
/
praxis
/
egacolor.inc
< prev
next >
Wrap
Text File
|
1990-07-16
|
6KB
|
185 lines
(* ------------------------------------------------------ *)
(* EGACOLOR.INC *)
(* Include-Datei zu PAL-EDDI.PAS für EGA-Karten *)
(* Turbo Pascal Version 5.5 *)
(* (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-4*THoehe,
'<C> Color-Cycling-Demo');
OutTextXY(0, SchriftY[1]-3*THoehe, 'Nr.');
Step:=1;
StepX:=GetMaxX DIV 2+13*TBreite;
StepY:=GetMaxY-2*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 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;
'c',
'C': BEGIN
CycleDemo;
Exit;
END;
#27: BEGIN
Ende:=TRUE;
Exit;
END;
END;
SetPalette(n, EGAFarben[n]); { Palette setzen }
UNTIL FALSE;
END;
(* ------------------------------------------------------ *)
(* Ende von EGACOLOR.INC *)