home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* VGACOL2.INC *)
- (* Include-Datei zu PALEDDI2.PAS für VGA-Karten *)
- (* Turbo Pascal Version ab 5.0 *)
- (* (c) 1990 Gerald Arend & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- TYPE
- RGBRec = RECORD
- RedVal, GreenVal, BlueVal: BYTE;
- END;
-
- CONST { Die Standardfarben }
- VGAFarben: ARRAY[0..MaxColors] OF RGBRec =
- ((RedVal: $00; GreenVal: $00; BlueVal: $00),
- (RedVal: $00; GreenVal: $00; BlueVal: $3F),
- (RedVal: $09; GreenVal: $3F; BlueVal: $09),
- (RedVal: $00; GreenVal: $3F; BlueVal: $3F),
- (RedVal: $3F; GreenVal: $05; BlueVal: $05),
- (RedVal: $2C; GreenVal: $00; BlueVal: $3F),
- (RedVal: $1C; GreenVal: $12; BlueVal: $00),
- (RedVal: $31; GreenVal: $31; BlueVal: $31),
- (RedVal: $0D; GreenVal: $0D; BlueVal: $0D),
- (RedVal: $00; GreenVal: $00; BlueVal: $1C),
- (RedVal: $00; GreenVal: $1C; BlueVal: $00),
- (RedVal: $00; GreenVal: $1C; BlueVal: $1C),
- (RedVal: $1C; GreenVal: $00; BlueVal: $00),
- (RedVal: $1C; GreenVal: $00; BlueVal: $1C),
- (RedVal: $3F; GreenVal: $3F; BlueVal: $09),
- (RedVal: $3F; GreenVal: $3F; BlueVal: $3F));
-
- VAR
- FarbWert: LONGINT; { Nummer der Farbe von 1 bis 262.144 }
- SchriftY: ARRAY[1..3] OF INTEGER;
- Step: BYTE;
- StepX, StepY, WertX, WertY: INTEGER;
- Ende: BOOLEAN;
- THoehe, TBreite: WORD;
-
- PROCEDURE DrawBars; { Farbbalken und Info erzeugen }
- VAR
- n: BYTE;
- s: STRING[6];
- 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 '+
- 'VGA-Modus 640 x 480, 16 Farben aus einer '+
- 'Palette von 262.144');
- SetTextJustify(LeftText, BottomText);
- SetColor(MaxColors);
- SetWriteMode(XORPut);
- TBreite:=TextWidth('X');
- THoehe:=TextHeight('X');
- SchriftY[1]:=GetMaxY div 2+7*THoehe;
- SchriftY[2]:=GetMaxY div 2+10*THoehe;
- SchriftY[3]:=GetMaxY div 2+13*THoehe;
- OutTextXY(0, SchriftY[1]-3*THoehe, 'Nr.');
- OutTextXY(0, SchriftY[1], 'Rot');
- OutTextXY(0, SchriftY[2], 'Grün');
- OutTextXY(0, SchriftY[3], 'Blau');
- OutTextXY(0, GetMaxY-6*THoehe,
- '<r> <g> <b> Farbwert erhöhen');
- OutTextXY(0, GetMaxY-4*THoehe,
- '<R> <G> <B> Farbwert erniedrigen');
- OutTextXY(0, GetMaxY-2*THoehe,
- '<F> Fließenden Übergang errechnen'+
- ' (Abschluß mit <ENTER>)');
- OutTextXY(GetMaxX DIV 2, GetMaxY-6*THoehe,
- '<C> Color-Cycling-Demo');
- OutTextXY(GetMaxX DIV 2, GetMaxY-4*THoehe,
- '<S> Turbo-Pascal-Prozedur erzeugen');
- Str((LONGINT(VGAFarben[0].RedVal)*4096+
- VGAFarben[0].GreenVal * 64 +
- VGAFarben[0].BlueVal):6, s);
- WertX:=15*TBreite;
- WertY:=GetMaxY-10*THoehe;
- OutTextXY(0, WertY, 'Farbwert: ');
- OutTextXY(WertX, WertY, s);
- Step:=1;
- StepX:=GetMaxX DIV 2+13*TBreite;
- StepY:=WertY;
- 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);
- Str(VGAFarben[n].RedVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[1], s);
- Str(VGAFarben[n].GreenVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[2], s);
- Str(VGAFarben[n].BlueVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[3], 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 setzen }
- VAR
- n: BYTE;
- BEGIN
- FOR n:=0 TO MaxColors DO
- BEGIN
- { Erst den Farbwert in der Palette
- gleich der Palettennummer setzen... }
- SetPalette(n, n);
- { ... und dann erst die RGB-Palettenwerte eintragen ! }
- WITH VGAFarben[n] DO
- SetRGBPalette(n, RedVal, GreenVal, BlueVal);
- END;
- 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, 'VAR');
- Writeln(Datei, ' n: BYTE;');
- Writeln(Datei, 'TYPE');
- Writeln(Datei, ' RGBRec = RECORD');
- Writeln(Datei, ' RedVal, GreenVal, BlueVal: BYTE;');
- Writeln(Datei, ' END;');
- Writeln(Datei, 'CONST');
- Writeln(Datei, ' VGAFarben: ARRAY[0..MaxColors] OF RGBRec =');
- Write(Datei, ' ((');
- FOR n:=0 TO MaxColors DO
- BEGIN
- IF n>0 THEN
- Write(Datei, ' (');
- WITH VGAFarben[n] DO
- Write(Datei, 'RedVal: ', RedVal:2, '; GreenVal: ', GreenVal:2,
- '; BlueVal: ', BlueVal:2);
- IF n=MaxColors THEN
- Writeln(Datei, '));')
- ELSE
- Writeln(Datei, '),');
- END;
- Writeln(Datei, 'BEGIN');
- Writeln(Datei, ' FOR n:=0 TO MaxColors DO');
- Writeln(Datei, ' BEGIN');
- Writeln(Datei, ' SetPalette(n, n);');
- Writeln(Datei, ' WITH VGAFarben[n] DO');
- Writeln(Datei, ' SetRGBPalette(n, RedVal, GreenVal, BlueVal);');
- Writeln(Datei, ' END;');
- Writeln(Datei, 'END;');
- Writeln(Datei);
- Close(Datei);
- END;
-
- PROCEDURE ChangeColors; { Farben interaktiv verändern }
- VAR
- x: INTEGER;
- n: BYTE;
- ch: CHAR;
-
- PROCEDURE MakeGradient; { Fließende Farbübergänge }
- VAR
- i, n2: BYTE;
- ch2: CHAR;
- x2: INTEGER;
- RDiff, GDiff, BDiff: Real;
- BEGIN
- n2:=n;
- Add(n2, 0, MaxColors, 1, TRUE);
- DrawFrame(n2, SchriftY[3]+10);
- REPEAT
- ch2:=ReadKey;
- CASE ch2 OF
- #0: BEGIN
- DrawFrame(n2, SchriftY[3]+10);
- ch2:=ReadKey;
- REPEAT
- CASE ch2 OF
- #75: Add(n2, 0, MaxColors, -1, TRUE);
- #77: Add(n2, 0, MaxColors, 1, TRUE);
- END;
- UNTIL n2<>n;
- DrawFrame(n2, SchriftY[3]+10);
- END;
- #27: BEGIN { Abbruch }
- DrawFrame(n2, SchriftY[3]+10);
- Exit;
- END;
- END;
- UNTIL ch2=#13;
- IF n2<n THEN
- BEGIN
- i:=n2;
- n2:=n;
- n:=i;
- END;
- RDiff:=(VGAFarben[n].RedVal-VGAFarben[n2].RedVal)/
- (n2-n);
- GDiff:=(VGAFarben[n].GreenVal-VGAFarben[n2].GreenVal)/
- (n2-n);
- BDiff:=(VGAFarben[n].BlueVal-VGAFarben[n2].BlueVal)/
- (n2-n);
- FOR i:=n+1 TO n2-1 DO
- WITH VGAFarben[i] DO
- BEGIN
- x2:=Succ(i)*GetMaxX DIV (MaxColors+2)+TBreite;
- RedVal:=VGAFarben[n].RedVal-Round((i-n)*RDiff);
- GreenVal:=VGAFarben[n].GreenVal-Round((i-n)*GDiff);
- BlueVal:=VGAFarben[n].BlueVal-Round((i-n)*BDiff);
- ShowValue(x2, SchriftY[1],
- VGAFarben[i].RedVal, 3);
- ShowValue(x2, SchriftY[2],
- VGAFarben[i].GreenVal, 3);
- ShowValue(x2, SchriftY[3],
- VGAFarben[i].BlueVal, 3);
- SetRGBPalette(i, RedVal, GreenVal, BlueVal);
- END;
- DrawFrame(n2, SchriftY[3]+10);
- END;
-
- BEGIN
- n:=0;
- Ende:=FALSE;
- SetColor(MaxColors);
- DrawFrame(n, SchriftY[3]+10);
- REPEAT
- x:=Succ(n)*GetMaxX DIV (MaxColors+2)+TBreite;
- ch:=ReadKey;
- CASE ch OF
- #0: BEGIN
- DrawFrame(n, SchriftY[3]+10);
- ch:=ReadKey;
- CASE ch OF
- #75: Add(n, 0, MaxColors, -1, TRUE); { <- }
- #77: Add(n, 0, MaxColors, 1, TRUE); { -> }
- END;
- DrawFrame(n, SchriftY[3]+10);
- END;
- 'r': BEGIN
- { Farbwert verändern }
- Add(VGAFarben[n].RedVal, 0, 63, Step, TRUE);
- { Neuen Wert anzeigen }
- ShowValue(x, SchriftY[1],
- VGAFarben[n].RedVal, 3);
- END;
- 'g': BEGIN
- Add(VGAFarben[n].GreenVal, 0, 63, Step, TRUE);
- ShowValue(x, SchriftY[2],
- VGAFarben[n].GreenVal, 3);
- END;
- 'b': BEGIN
- Add(VGAFarben[n].BlueVal, 0, 63, Step, TRUE);
- ShowValue(x, SchriftY[3],
- VGAFarben[n].BlueVal, 3);
- END;
- 'R': BEGIN
- Add(VGAFarben[n].RedVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[1],
- VGAFarben[n].RedVal, 3);
- END;
- 'G': BEGIN
- Add(VGAFarben[n].GreenVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[2],
- VGAFarben[n].GreenVal, 3);
- END;
- 'B': BEGIN
- Add(VGAFarben[n].BlueVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[3],
- VGAFarben[n].BlueVal, 3);
- END;
- 'f',
- 'F': MakeGradient;
- 's',
- 'S': Palette2Disk;
- '+': 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;
- { Farbwert aus den einzelnen RGB-Werten zusammenbauen }
- FarbWert:=
- LONGINT(VGAFarben[n].RedVal)*4096+
- VGAFarben[n].GreenVal*64 +
- VGAFarben[n].BlueVal;
- ShowValue(WertX, WertY, FarbWert, 6); { Wert anzeigen }
- WITH VGAFarben[n] DO { Palettenwert neu setzen }
- SetRGBPalette(n, RedVal, GreenVal, BlueVal);
- UNTIL FALSE;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von VGACOL2.INC *)
-