home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
10
/
praxis
/
pal_eddi.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-07-11
|
5KB
|
200 lines
(* ------------------------------------------------------ *)
(* PAL-EDDI.PAS *)
(* Paletten-Editor für EGA- und VGA-Karten *)
(* Turbo Pascal Version 5.5 *)
(* (c) 1990 Gerald Arend & TOOLBOX *)
(* ------------------------------------------------------ *)
{$DEFINE VGA} { Für EGA-Karten $DEFINE EGA eingeben! }
{$A+,B-,D-,E-,F-,I-,L-,N-,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 VGACOLOR.INC}
{$ELSE}
{$I EGACOLOR.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);
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;
REPEAT
Timer:=0;
Add(n, 1, 5, 1, TRUE);
CASE n OF
1: DrawFigur(1, 1, 1, 1);
2: DrawFigur(-2, 1, 0, -1);
3: DrawFigur(2, -2, -0, 1);
4: DrawFigur(0, 1, 1, 1);
5: DrawFigur(-1, 1, 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.