home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* PALEDDI2.PAS *)
- (* Paletten-Editor für EGA- und VGA-Karten *)
- (* Turbo Pascal ab 5.0 *)
- (* (c) 1990 Gerald Arend & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- {$DEFINE VGA} { Für EGA-Karten $DEFINE EGA eingeben! }
- {$B-,D-,F-,I-,L-,O-,R-,S-,V-}
-
- PROGRAM Pal_Eddi;
-
- USES Crt, Graph;
-
- PROCEDURE ShowValue(x, y: INTEGER; Wert: LONGINT;
- Laenge: BYTE); FORWARD;
- PROCEDURE DrawFrame(n: BYTE; y: INTEGER); FORWARD;
- PROCEDURE Add(VAR Source: BYTE; Min, Max: INTEGER;
- Step: SHORTINT; Wrap: BOOLEAN); FORWARD;
- PROCEDURE CycleDemo; FORWARD;
-
- {$IFDEF VGA}
- {$I VGACOL2.INC}
- {$ELSE}
- {$I EGACOL2.INC}
- {$ENDIF}
-
- PROCEDURE StartGrafik(GD, GM: INTEGER);
- BEGIN
- InitGraph(GD, GM, '');
- IF GraphResult<>0 THEN
- BEGIN
- RestoreCrtMode;
- Writeln(^G, 'Ich konnte die Grafik nicht starten '+
- '- Fehler ', GrError:3, ': ',
- GraphErrorMsg(GrError));
- Writeln('Steht der BGI-Treiber EGAVGA.BGI im gleichen '+
- 'Verzeichnis?');
- Halt;
- END;
- SetTextStyle(DefaultFont, HorizDir, 1);
- SetTextJustify(LeftText, BottomText);
- SetColor(MaxColors);
- SetWriteMode(XORPut);
- TBreite:=TextWidth('X');
- THoehe:=TextHeight('X');
- END;
-
- PROCEDURE ShowValue(x, y: INTEGER; Wert: LONGINT;
- Laenge: BYTE);
- { Zeigt eine Zahl im Grafikmodus auf dem Bildschirm an }
- VAR
- ValStr: STRING[20];
- BEGIN
- Str(Wert:Laenge, ValStr);
- SetColor(0);
- SetFillStyle(SolidFill, 0);
- Bar(x, { Hintergrund löschen }
- y-TextHeight('X'),
- x+Laenge*TextWidth('X'),
- y);
- SetColor(MaxColors);
- OutTextXY(x, y, ValStr);
- END;
-
- PROCEDURE Add(VAR Source: BYTE; Min, Max: INTEGER;
- Step: SHORTINT; Wrap: BOOLEAN);
- { Add erhöht oder erniedrigt die als "Source" übergebene
- Variable. Min und Max sind die erlaubten Grenzen, Wrap
- schaltet das Wrapping bei Über- und Unterschreitung
- der zulässigen Minimal- oder Maximalwerte ein und aus }
- VAR
- WrapNoetig: BOOLEAN;
- SourceAlt: BYTE;
- BEGIN
- WrapNoetig:=(Source+Step>Max) OR (Source+Step<Min);
- CASE WrapNoetig OF
- TRUE: IF Wrap THEN
- IF Step>0 THEN
- Source:=Min
- ELSE
- Source:=Max
- ELSE
- IF Step>0 THEN
- Source:=Max
- ELSE
- Source:=Min;
- FALSE: Inc(Source, Step);
- END;
- END;
-
- PROCEDURE DrawFrame(n: BYTE; y: INTEGER);
- { Zeichnet ein Rechteck um die aktive Farbe }
- BEGIN
- Rectangle(Succ(n)*GetMaxX DIV (MaxColors+2),
- 2*TextHeight('X'),
- (n+2)*GetMaxX DIV (MaxColors+2)-1, y);
- END;
-
- PROCEDURE CycleDemo; { Color-Cycling }
- VAR
- x0, y0, ri, ra: INTEGER;
- Farben, FarbenAlt: PaletteType;
- ch: CHAR;
- Aktuell: BYTE;
- Hilfe: SHORTINT;
- w, sinw, cosw: REAL;
- XAsp, YAsp: WORD;
-
- PROCEDURE DrawFigur(xfi, yfi, xfa, yfa: SHORTINT);
- { Zeichnet die Linienfigur }
- VAR
- x: INTEGER;
- BEGIN
- ClearDevice;
- FOR x:=0 TO 300 DO
- BEGIN
- SetColor(x MOD MaxColors+1);
- w:=x*Pi/150;
- sinw:=Sin(w);
- cosw:=Cos(w)*sinw;
- Line(x0+Round(ri*cosw*xfi*(YAsp DIV XAsp)),
- y0+Round(ri*sinw*yfi),
- x0+Round(ra*sinw*xfa*(YAsp DIV XAsp)),
- y0+Round(ra*cosw*yfa));
- END;
- END;
-
- PROCEDURE Cycle; { eigentliche Cycling-Routine }
- VAR
- x, n: BYTE;
- Timer: WORD;
- CONST
- DelayTime = 500; { Wie lange soll jedes Demo laufen? }
- BEGIN
- n:=0;
- ch:=#0;
- REPEAT
- Timer:=0;
- Add(n, 1, 7, 1, TRUE);
- CASE n OF
- 1: DrawFigur(2, 0, -1, 2);
- 2: DrawFigur(-1, 2, -1, 1);
- 3: DrawFigur(1, 1, 1, 1);
- 4: DrawFigur(-3, 2, 0, -2);
- 5: DrawFigur(1, -2, 1, 2);
- 6: DrawFigur(0, 1, 1, 1);
- 7: DrawFigur(-1, 2, 1, 1);
- END;
- REPEAT
- Inc(Timer);
- { Die Farben der Palette
- werden zyklisch vertauscht... }
- Hilfe:=Farben.Colors[1];
- FOR x:=2 TO MaxColors DO
- Farben.Colors[Pred(x)]:=Farben.Colors[x];
- Farben.Colors[MaxColors]:=Hilfe;
- { ...und auf einen Schlag die
- ganze Palette neu gesetzt! }
- SetAllPalette(Farben);
- UNTIL (Timer>DelayTime) or KeyPressed;
- IF KeyPressed THEN
- BEGIN
- ch:=ReadKey;
- IF ch=#0 THEN
- ch:=ReadKey;
- END;
- UNTIL ch=#27; { Ein Druck auf <Esc> beendet den Zauber }
- END;
-
- BEGIN
- ClearDevice;
- GetAspectRatio(XAsp, YAsp);
- SetWriteMode(CopyPut);
- SetLineStyle(SolidLn, 0, ThickWidth);
- GetPalette(Farben);
- FarbenAlt:=Farben; { Original-Palette sichern }
- x0:=GetMaxX DIV 2;
- y0:=GetMaxY DIV 2;
- ri:=GetMaxY DIV 5;
- ra:=GetMaxY DIV 2-2;
- Cycle;
- ClearDevice;
- SetAllPalette(FarbenAlt);
- SetWriteMode(XORPut);
- SetLineStyle(SolidLn, 0, NormWidth);
- END;
-
- { Hauptprogramm }
- BEGIN
- {$IFDEF VGA}
- StartGrafik(VGA, VGAHi);
- {$ELSE}
- StartGrafik(EGA, EGAHi);
- {$ENDIF}
- InitPalette;
- REPEAT
- DrawBars;
- ChangeColors;
- UNTIL Ende;
- RestoreCrtMode;
- END.