home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
- {$M 16384,0,655360}
- (* ----------------------------------------------------------- *)
- (* PLOT.PAS *)
- (* (C) 1992 Norbert Braun & DMV-Verlag *)
- (* Compiler: Turbo Pascal 6.0 *)
- (* *)
- (* Das Programm zeichnet HPGL-Dateien auf den Bildschirm *)
- (* entweder in weiß oder mit Rot-Grün-Effekt. Es werden *)
- (* alle Grafikkarten unterstützt. Für 3D-Bilder wird EGA, *)
- (* VGA oder IBM/8514A benötigt. Das Programm unterstützt *)
- (* zusätzlich SVGA-Karten mit 512 und 1024 kBytes Bild- *)
- (* schirmspeicher in 800x600-Pixeln Auflösung. *)
- (* ----------------------------------------------------------- *)
-
- PROGRAM Plot;
-
- USES
- Crt, Dos, Graph;
-
- TYPE
- tXYCoord = (nx, ny, nyr);
- tTokens = (Command, Number, CharArray, SpecChars);
- tTokenSet = ARRAY[tTokens] OF SET OF CHAR;
-
- CONST
- GM800x600 = 4; (* 800x600 SuperVGA 1MByte *)
- FirstMode = 0; (* 800x600 SuperVGA 512 kB *)
- PreDefGreen = $12; (* vordefinierte Farben für *)
- PreDefRed = $55; (* abgedunkelten Raum und *)
- PreDefBlue = $0E; (* SVGA, ggf. anpassen *)
- NewGreen : INTEGER = PreDefGreen; (* Farbeinstellungen *)
- NewRed : INTEGER = PreDefRed;
- BluePart : INTEGER = PreDefBlue;
- Color1 : WORD = Red;
- Color2 : WORD = Green;
- Terminator : CHAR = ';';
- DTerminator : CHAR = #3;
- DefaultCorrector = 10;
- Corrector : INTEGER = DefaultCorrector;
- hpMaxXDef = 1104;
- hpMaxYDef = 796;
- hpMinX : INTEGER = 0;
- hpMaxX : INTEGER = hpMaxXDef; (* Plotterformat X-Achse *)
- hpMinY : INTEGER = 0;
- hpMaxY : INTEGER = hpMaxYDef; (* Plotterformat Y-Achse *)
- scMaxX : INTEGER = 640; (* Standardauflösung X *)
- scMaxY : INTEGER = 480; (* Standardauflösung Y *)
- xCount : INTEGER = 0; (* X-Abst. Rot/Grün Default *)
- yCount : INTEGER = 0; (* Y-Abst. Rot/Grün Default *)
- CCSet : tTokenSet = ([#27, '.', 'A'..'Z'], ['.', '-',
- '0'..'9'], [' '..#254], [#0 ..#255]);
- SVGAName : STRING[8] = 'SUPERVGA';
-
- VAR
- CmdLine : ComStr;
- HPGLFile : PathStr;
- HPGLDir : DirStr;
- HPGLName : NameStr;
- HPGLExt : ExtStr;
- OldChrSet, i, r,
- wa, we, Test,
- x1, x0, y1, y0 : INTEGER;
- c, ch : CHAR;
- sx, xVer, yVer,
- Value, LastToken,
- Ignore, TokenRead : STRING;
- f, mf : Text;
- ThisToken : tTokens;
- PaintMode : (AbsPaint, RelPaint);
- Pen : (Up, Down);
-
- PROCEDURE ClearBuffer;
- (* Löschen des Tastaturpuffers *)
- VAR
- key: CHAR;
- BEGIN
- IF KeyPressed THEN WHILE KeyPressed DO key := ReadKey;
- END;
-
- PROCEDURE SetPrefColors;
- (* Setzen der Palettenfarben für Rot und Grün *)
- BEGIN
- SetRGBPalette(Red, BYTE(NewRed), 0, 0);
- SetRGBPalette(Green, 0, BYTE(NewGreen), BYTE(BluePart));
- END;
-
- PROCEDURE ModifyColors;
- (* Wechseln der Palettenfarben für Rot und Grün *)
- CONST
- Max = $FF;
- Min = $01;
- MaxBlue = $F0;
- MinBlue = $00;
- BEGIN
- ClearBuffer;
- REPEAT
- ch := ReadKey;
- CASE ch OF
- '+': BEGIN
- NewGreen := PreDefGreen;
- NewRed := PreDefRed;
- BluePart := PreDefBlue;
- END;
- '-': BEGIN
- NewGreen := Min; NewRed := Min;
- BluePart := MinBlue;
- END;
- '*': BEGIN
- NewGreen := Max; NewRed := Max;
- BluePart := MaxBlue;
- END;
-
- '/': BEGIN
- Dec(NewRed); Dec(NewGreen);
- Dec(BluePart);
- END;
- #0: BEGIN
- ch := ReadKey;
- CASE ch OF
- {up } 'H': Inc(NewRed);
- {down} 'P': Dec(NewRed);
- {<-} 'K': Inc(NewGreen);
- {->} 'M': Dec(NewGreen);
- {left/up} 'G': BEGIN Inc(NewRed); Inc(NewGreen); END;
- {right/down} 'Q': BEGIN Dec(NewRed); Dec(NewGreen); END;
- {rright/up} 'I': BEGIN Inc(NewRed); Dec(NewGreen); END;
- {left/down} 'O': BEGIN Dec(NewRed); Inc(NewGreen); END;
- {Ins} 'R': Inc(BluePart);
- {Del} 'S': Dec(BluePart);
- END;
- END;
- END;
- SetPrefColors;
- UNTIL ch IN [#13, #27, #32];
- END;
-
- PROCEDURE Draw(xDiv, yDiv: INTEGER);
- (* Setzt die ermittelten Werte in Bildschirmgrafik um *)
- BEGIN
- MoveTo(x0 + xDiv, y0 + yDiv);
- SetColor(Color1);
- IF Pen = Down THEN
- CASE PaintMode OF
- AbsPaint : LineTo(x1 + xDiv, y1 + yDiv);
- RelPaint : BEGIN
- MoveTo(x0 + xDiv, y0 + yDiv);
- LineRel(x1 + xDiv, y1 + yDiv);
- END;
- END;
- MoveTo(x0, y0);
- SetColor(Color2);
- IF Pen = Up THEN BEGIN
- CASE PaintMode OF
- AbsPaint : MoveTo(x1, y1);
- RelPaint : BEGIN
- MoveTo(x0, y0);
- MoveRel(x1, y1);
- END;
- END;
- END ELSE
- CASE PaintMode OF
- AbsPaint : LineTo(x1, y1);
- RelPaint : BEGIN
- MoveTo(x0, y0);
- LineRel(x1, y1);
- END;
- END;
- x0 := GetX;
- x1 := x0;
- y0 := GetY;
- y1 := y0;
- END;
-
- FUNCTION ReadToken(t : tTokens) : STRING;
- (* liest einen Token aus der Datei *)
- BEGIN
- ThisToken := t;
- IF (t = SpecChars) THEN BEGIN
- Ignore := '';
- TokenRead := c;
- ReadToken := c;
- Read(f, c);
- END ELSE BEGIN
- Ignore := '';
- WHILE NOT (c IN CCSet[t]) AND NOT EoF(f) DO BEGIN
- IF NOT (c IN [#32..#126]) THEN c := '_';
- Ignore := Ignore + c;
- Read(f, c);
- END;
- TokenRead := '';
- IF (t = Command) AND NOT EoF(f) THEN BEGIN
- IF (c = #27) THEN c := '!';
- TokenRead := TokenRead + c;
- Read(f, c);
- TokenRead := TokenRead + c;
- Read(f, c); (* damit c das nächste Zeichen enthält *)
- END ELSE WHILE (c IN CCSet[t]) AND NOT EoF(f) DO BEGIN
- TokenRead := TokenRead + c;
- Read(f, c);
- END;
- IF (TokenRead[1] = '.') AND (TokenRead[2] = '5') THEN {}
- ELSE IF (Length(Ignore) > 0) AND NOT
- (Ignore[1] IN [DTerminator, ' ', ',', ';']) THEN ;
- END;
- ReadToken := TokenRead;
- END;
-
- FUNCTION Translate(n: INTEGER; k: tXYCoord): INTEGER;
- (* Setzt die HPGL-Koordinaten in Bildschirmkoordinaten um *)
- VAR
- fx, fy : INTEGER;
- BEGIN
- fx := Trunc((hpMaxX - hpMinX) / scMaxX);
- fy := Trunc((hpMaxY - hpMinY) / scMaxY);
- IF (fx = 0) THEN fx := 1;
- IF (fy = 0) THEN fy := 1;
- CASE k OF
- nx : Translate := Trunc((n - hpMinX) / fx);
- ny : Translate := scMaxY - Trunc((n - hpMinY) / fy);
- nyr: Translate := - Trunc((n - hpMinY) / fy);
- ELSE Translate := 0;
- END;
- END;
-
- FUNCTION Digit: INTEGER;
- (* Setzt die eingelesenen Zahlenwerte um *)
- VAR
- num, t: INTEGER;
- BEGIN
- IF (c <> Terminator) THEN
- Val(ReadToken(Number), num, t)
- ELSE
- num := 0;
- Digit := num;
- END;
-
- PROCEDURE GetXY(xDiff, yDiff: INTEGER);
- BEGIN
- WHILE NOT (c = Terminator) AND
- NOT (c IN CCSet[Command]) AND
- NOT EoF(f) DO BEGIN
- IF (PaintMode = AbsPaint) THEN BEGIN
- x1 := Translate(Digit, nx);
- y1 := Translate(Digit, ny)
- END ELSE BEGIN
- x1 := Translate(Digit, nx);
- y1 := Translate(Digit, nyr);
- END;
- Draw(xDiff, yDiff);
- END;
- END;
-
- PROCEDURE Parse(xDiff, yDiff: INTEGER);
- (* der eigentliche Parser für die HPGL-Befehle *)
- VAR
- Test: INTEGER;
- BEGIN
- LastToken := TokenRead;
- sx := ReadToken(Command);
- CASE TokenRead[1] OF
- '.' : IF TokenRead[2] = '5' THEN ;
- '!' : BEGIN
- TokenRead := TokenRead + c;
- Read(f, c);
- CASE TokenRead[2] OF
- '.' : BEGIN
- WHILE NOT (c = ':') AND
- NOT (c IN CCSet[Command]) AND
- NOT EoF(f) DO
- Val(ReadToken(Number), i, Test);
- END;
- END;
- END;
- 'A' : CASE TokenRead[2] OF
- 'A', 'R': ;
- END;
- 'C' : CASE TokenRead[2] OF
- 'A' : OldChrSet := Digit;
- 'I' : BEGIN
- r := Digit;
- IF (Pen = Down) THEN Circle(x0, y0, r);
- END;
- 'C',
- 'S' : ;
- 'P' : BEGIN
- wa := Digit;
- we := Digit;
- x0 := wa * TextWidth(' ');
- y0 := we * TextHeight(',');
- END;
- END;
- 'D' : CASE TokenRead[2] OF
- 'C',
- 'P',
- 'F' : ;
- 'I' : BEGIN
- wa := Digit; we := Digit;
- END;
- 'R' : BEGIN
- wa := Digit; we := Digit;
- END;
- 'T' : BEGIN
- sx := ReadToken(SpecChars);
- DTerminator := sx[1];
- END;
- END;
- 'E' : CASE TokenRead[2] OF
- 'A', 'E', 'W' : ;
- END;
- 'F' : CASE TokenRead[2] OF
- 'T' : ;
- END;
- 'I' : CASE TokenRead[2] OF
- 'M' : ;
- 'N' : BEGIN
- PaintMode := AbsPaint;
- Pen := Up;
- x0 := Translate(250, nx);
- y0 := Translate(596, ny);
- hpMinX := 0;
- hpMinY := 0;
- hpMaxX := hpMaxXDef * Corrector;
- hpMaxY := hpMaxYDef * Corrector;
- END;
- 'I', 'P', 'W' : ;
- END;
- 'L' : CASE TokenRead[2] OF
- 'B' : BEGIN
- sx := ReadToken(CharArray);
- Read(f, c);
- x0 := x1;
- y0 := y1;
- OutTextXY(x1, y1, sx);
- x0 := x0 + TextWidth(sx);
- END;
- 'T' : ;
- END;
- 'O' : CASE TokenRead[2] OF
- 'A', 'C'..'F', 'H', 'I',
- 'O', 'P', 'S', 'W': ;
- END;
- 'P' : CASE TokenRead[2] OF
- 'A' : BEGIN
- PaintMode := AbsPaint;
- GetXY(xDiff, yDiff);
- END;
- 'D' : BEGIN
- Pen := Down;
- GetXY(xDiff, yDiff);
- END;
- 'R' : BEGIN
- PaintMode := RelPaint;
- GetXY(xDiff, yDiff);
- END;
- 'S' : ; (* Paperformat ignorieren *)
- 'U' : BEGIN
- Pen := Up;
- GetXY(xDiff, yDiff);
- END;
- END;
- 'R' : CASE TokenRead[2] OF
- 'A', 'R': ;
- END;
- 'S' : CASE TokenRead[2] OF
- 'A' : ;
- 'C' : IF (c = Terminator) THEN
- BEGIN
- hpMinX := 0;
- hpMinY := 0;
- hpMaxX := hpMaxXDef * Corrector;
- hpMaxY := hpMaxYDef * Corrector;
- END
- ELSE
- BEGIN
- hpMinX := Digit; hpMaxX := Digit;
- hpMinY := Digit; hpMaxY := Digit;
- END;
- 'I' : BEGIN
- wa := Digit; we := Digit;
- END;
- 'L',
- 'M' : ;
- 'P' : ;
- 'R',
- 'S' : ;
- END;
- 'T' : IF TokenRead[2] = 'L' THEN ;
- 'U' : IF TokenRead[2] = 'C' THEN ;
- 'V' : IF TokenRead[2] = 'S' THEN wa := Digit;
- 'W' : IF TokenRead[2] = 'G' THEN ;
- 'X' : IF TokenRead[2] = 'T' THEN ;
- 'Y' : IF TokenRead[2] = 'T' THEN ;
- END;
- LastToken := TokenRead;
- END;
-
- FUNCTION UpString(s: STRING): STRING;
- VAR
- i: BYTE;
- u: STRING;
- BEGIN
- IF s <> '' THEN BEGIN
- u := s;
- FOR i := 1 TO Length(u) DO u[i] := UpCase(u[i]);
- END ELSE u := '';
- UpString := u
- END;
-
- PROCEDURE PlotFile(xDiv, yDiv: INTEGER);
- BEGIN
- x0 := Translate(0, nx); x1 := Translate(0, nx);
- y0 := Translate(0, ny); y1 := Translate(0, ny);
- Assign(f, HPGLFile);
- Reset(f);
- IF IOResult = 0 THEN BEGIN
- scMaxX := GetMaxX; scMaxY := GetMaxY;
- wa := GetBkColor;
- SetBkColor(Black);
- Read(f, c);
- LastToken := '*Start*';
- REPEAT
- Parse(xDiv, yDiv);
- UNTIL EoF(f);
- Close(f);
- END;
- END;
-
- PROCEDURE Copyright;
- BEGIN
- TextColor(Yellow);
- WriteLn(#13#10'3D-Plot v1.0, (C) 1992 '
- + 'Norbert Braun & DMV-Verlag.'#10);
- TextColor(LightGray);
- END;
-
- PROCEDURE InitBGI;
- (* Initialisierung der Grafik; für die Verwendung von SuperVGA *)
- (* muß die entsprechende Environment-Variable »BGIDRIVER« ge- *)
- (* setzt sein. Der Grafiktreiber wird in dem Verzeichnis ge- *)
- (* sucht, das mit der Environment-Variablen »BGIPATH« defi- *)
- (* niert ist. Ist »BGIPATH« nicht gesetzt, wird im aktuellen *)
- (* Verzeichnis gesucht. *)
- (* SUPERVGA benötigt eine Trident-, Paradise- oder Tseng-Karte *)
- (* mit 1 MByte Bildschirmspeicher, die anderen Treiber für 800 *)
- (* x 600 eine SVGA-Karte mit 512 kByte Bildschirmspeicher. *)
- (* ----------------------------------------------------------- *)
- (* SUPERVGA: 800x600 in 256 Farben; Karte = SVGA autodetect *)
- (* PVGA800: 800x600 in 16 Farben; Karte = Paradise Prof. VGA *)
- (* TRID800: 800x600 in 16 Farben; Karte = Trident-Chipsatz *)
- (* TSENG800: 800x600 in 16 Farben; Karte = Tseng ETx000 *)
-
- VAR
- GraphDone,
- GraphDriver,
- GraphMode : INTEGER;
- BGIPath : PathStr;
- UserBGI : NameStr;
- ErrMsg : STRING;
- BGIFile : FILE;
- Attr : WORD;
- BEGIN
- UserBGI := UpString(GetEnv('BGIDRIVER'));
- BGIPath := UpString(GetEnv('BGIPATH'));
-
- IF UserBGI <> '' THEN BEGIN (* Install Userdriver *)
- IF UserBGI = SVGAName THEN
- GraphMode := GM800x600 (* aus DOS Extra 17 *)
- ELSE
- GraphMode := FirstMode; (* Sondertreiber *)
- {$IFDEF VER60}
- GraphDriver := InstallUserDriver(UserBGI, NIL);
- {$ELSE} (* bei Turbo 5.0/5.5 noch fehlerhaft: *)
- GraphDriver := InstallUserDriver(UserBGI, NIL) + 5;
- {$ENDIF}
- (* Wenn ein externer BGI-Treiber ReadOnly gesetzt *)
- (* ist, steigt das Programm mit Fehler 3 aus: *)
- Assign(BGIFile, BGIPath + '\' + UserBGI + '.BGI');
- GetFAttr(BGIFile, Attr);
- IF Attr <> Archive THEN SetFAttr(BGIFile, Archive);
- END ELSE DetectGraph(GraphDriver, GraphMode);
-
- InitGraph(GraphDriver, GraphMode, BGIPath);
- GraphDone := GraphResult;
-
- IF GraphDone <> grOk THEN BEGIN
- Copyright;
- WriteLn('Grafik-Initialisierungsfehler Nr. ',
- Abs(GraphDone), ':');
- CASE GraphDone OF
- -1: ErrMsg := 'Grafiktreiber nicht geladen.';
- -2: ErrMsg := 'Grafik-Hardware nicht ermittelt.';
- -3: ErrMsg := 'BGI-Treiber nicht gefunden.';
- -4: ErrMsg := 'Falscher Grafiktreiber.';
- ELSE ErrMsg := 'unerwarteter Fehler!';
- END;
- WriteLn(ErrMsg);
- Halt(2);
- END;
- END;
-
- PROCEDURE UseMakroFile;
- VAR
- MacroFile : ComStr;
- MacroDir : DirStr;
- MacroName : NameStr;
- MacroExt : ExtStr;
- Wait : WORD;
-
- PROCEDURE ColorSel;
- BEGIN
- IF Pos('GREEN', Value) > 0 THEN BEGIN
- Color1 := Green; Color2 := Green;
- END ELSE IF Pos('RED', Value) > 0 THEN BEGIN
- Color1 := Red; Color2 := Red;
- END ELSE IF Pos('WHITE', Value) > 0 THEN BEGIN
- Color1 := White; Color2 := White;
- END ELSE IF Pos('BOTH', Value) > 0 THEN BEGIN
- Color1 := Green; Color2 := Red;
- END ELSE Write(#7); (* Fehler gefunden! *)
- END;
-
- PROCEDURE Pause;
- VAR
- key: CHAR;
- BEGIN
- ClearBuffer;
- key := #0;
- Sound(800); Delay(25); Sound(400); Delay(25); NoSound;
- REPEAT
- key := ReadKey;
- UNTIL key <> #0;
- END;
-
- BEGIN
- MacroFile := ParamStr(1);
- Delete(MacroFile, 1, 2); (* »-M« entfernen *)
- FSplit(MacroFile, MacroDir, MacroName, MacroExt);
- IF MacroExt = '' THEN
- MacroFile := MacroFile + '.PMC';
- Assign(mf, MacroFile);
- Reset(mf);
- IF IOResult <> 0 THEN BEGIN
- RestoreCrtMode;
- Copyright;
- WriteLn('Beschreibungsdatei nicht gefunden!');
- WriteLn('Programm wird abgebrochen');
- Halt(2);
- END;
- WHILE NOT SeekEoF(mf) DO BEGIN
- ReadLn(mf, CmdLine);
- IF Length(CmdLine) > 0 THEN BEGIN
- WHILE Pos(' ', CmdLine) > 0 DO
- Delete(CmdLine, Pos(' ', CmdLine), 1);
- Value := UpString(CmdLine);
- IF Length(Value) > 2 THEN Delete(Value, 1, 2);
- CASE UpCase(CmdLine[1]) OF
- ';' : (* Kommentar *);
- 'X' : Val(Value, xCount, Test);
- 'Y' : Val(Value, yCount, Test);
- 'F' : BEGIN
- HPGLFile := Value;
- IF Pos('.', HPGLFile) = 0 THEN
- HPGLFile := HPGLFile + '.PLT';
- END;
- 'D' : ColorSel;
- '*' : BEGIN
- IF HPGLFile <> '' THEN PlotFile(xCount, yCount);
- Color1 := Red; Color2 := Green; (* alle Werte *)
- xCount := 0; yCount := 0; (* zurücksetzen *)
- Corrector := DefaultCorrector;
- END;
- 'W' : BEGIN
- Val(Value, Wait, Test);
- IF Wait > 0 THEN Delay(Wait * 1000);
- END;
- 'P' : IF Pos('PAUSE', UpString(CmdLine)) > 0 THEN Pause;
- 'C' : IF Pos('CLS', UpString(CmdLine)) > 0 THEN
- ClearDevice;
- 'K' : Val(Value, Corrector, Test);
- END;
- END;
- END;
- END;
-
- PROCEDURE Help;
- VAR
- ProgDir: DirStr;
- ProgName: NameStr;
- ProgExt: ExtStr;
- BEGIN
- Copyright;
- FSplit(ParamStr(0), ProgDir, ProgName, ProgExt);
- IF Pos('M', UpString(ParamStr(1))) > 1 THEN BEGIN
- WriteLn('Makrobefehle von ', Progname, ':');
- WriteLn(' ': 3, ';', ' ':11, 'Kommentarzeile mit beliebigem'
- + ' Inhalt');
- WriteLn(' ': 3, 'X=zahl', ' ':6,
- 'X-Differenz bei rot/grün');
- WriteLn(' ': 3, 'Y=zahl', ' ':6,
- 'Y-Different bei rot/grün');
- WriteLn(' ': 3, 'F=Name', ' ':6,
- 'Dateiname des HPGL-Files');
- WriteLn(' ': 3, 'W=zahl', ' ':6,
- 'Wartezeit in vollen Sekunden');
- WriteLn(' ': 3, 'K=zahl', ' ':6,
- 'Bildgrößen-Korrekturfaktor (Default=10)');
- WriteLn(' ': 3, 'CLS', ' ':9, 'Löschen des Bildschirms');
- WriteLn(' ': 3, 'PAUSE', ' ':7, 'Warten auf Tastendruck');
- WriteLn(' ': 3, '*', ' ':11, 'Startbefehl zum Zeichnen '
- + 'mit den aktuellen Werten');
- WriteLn(' ': 3, 'D=farbe '
- + 'Diese muß als Zeichenkette angegeben werden:');
- WriteLn(' ': 20, 'GREEN für grüne Farbe');
- WriteLn(' ': 20, 'RED für rote Farbe');
- WriteLn(' ': 20, 'WHITE für weiße Farbe');
- WriteLn(' ': 20, 'BOTH für Anzeige in rot und grün');
- WriteLn('Groß-/Kleinschreibung wird nicht beachtet.');
- Write ('Die Grafik wird erst mit dem Startbefehl mit den');
- WriteLn(' aktuellen Werten gezeichnet,');
- WriteLn('nach jedem Bild werden die Parameter wieder '
- + 'zurückgesetzt.');
- WriteLn('Pause, W(ait) und CLS werden sofort ausgeführt.');
- Write ('Für X=, Y=, K= und W= dürfen nur ganze Zahlen '
- + 'angegeben werden!');
- END ELSE BEGIN
- WriteLn('Syntax:');
- FSplit(ParamStr(0), ProgDir, ProgName, ProgExt);
- WriteLn(' ':3, ProgName, ' dateiname[.ext] [x-Differenz '
- + '[y-Differenz]] | -Mmakrodatei[.ext]');
- WriteLn('B':4, 'eispiele: ', ProgName, ' 3DIM.PLT 20 2'
- + ' Darstellung eines Bildes mit 3D-Effekt');
- WriteLn(' ':14, ProgName, ' 3DIM', ' ': 12,
- 'Darstellung des selben Bildes in weiß');
- WriteLn(' ':14, ProgName, ' -mMAKRO', ' ':9,
- 'Verwendung einer Makrodatei »MAKRO.PMC«');
- WriteLn(' ':14, ProgName, ' [-?]', ' ' :12,
- + 'Anzeige dieses Hilfebildschirms');
- WriteLn(' ':14, ProgName, ' -?M[ACRO]', ' ' :7,
- + 'Übersicht über die Makrobefehle'#10);
- Write ('Das Programm zeichnet HPGL-Plotterdateien auf den'
- + ' Bildschirm. Dabei kann zusätz-');
- Write ('lich ein 3D-Effekt erzeugt werden. Um diesen zu n'
- + 'utzen, wird eine Rotgrün-Brille');
- WriteLn('benötigt.');
- Write ('Bei Aufruf einer Plot-Datei ohne Angabe einer X-D'
- + 'ifferenz wird die Datei in weiß');
- WriteLn('ohne 3D-Effekt wiedergegeben. Farbangaben in der '
- + 'Plot-Datei werden übergangen.');
- Write ('Die Angabe eines Y-Wertes ist optional. Wird Y n'
- + 'icht angegeben, wird der X-Wert');
- WriteLn('für Y mit übernommen.');
- Write ('Für die Darstellung des 3D-Effektes wird eine EGA'
- + ', VGA, IBM/8514 oder SVGA-Karte');
- WriteLn('mit Farbmonitor benötigt.');
- WriteLn('Voreingestellte Dateiendung ist bei HPGL-Dateien '
- + '».PLT« und bei Makros ».PLC«.');
- WriteLn('Parameter in eckigen Klammern sind optional.');
- END;
- END;
-
- BEGIN
- IF (ParamCount < 1) OR (Pos('?', ParamStr(1)) > 0) THEN
- Help
- ELSE BEGIN
- InitBGI;
- SetPrefColors;
- IF (Pos('-m', ParamStr(1)) = 1) OR
- (Pos('/m', ParamStr(1)) = 1) OR
- (Pos('-M', ParamStr(1)) = 1) OR
- (Pos('/M', ParamStr(1)) = 1) THEN UseMakroFile
- ELSE BEGIN
- IF ParamCount > 1 THEN BEGIN
- Val(ParamStr(2), xCount, Test);
- IF Test <> 0 THEN xCount := 0;
- IF ParamCount > 2 THEN BEGIN
- Val(ParamStr(3), yCount, Test);
- IF Test <> 0 THEN yCount := xCount;
- END ELSE yCount := xCount;
- END ELSE BEGIN
- xCount := 0; yCount := xCount;
- END;
- HPGLFile := ParamStr(1);
- FSplit(HPGLFile, HPGLDir, HPGLName, HPGLExt);
- IF HPGLExt = '' THEN
- HPGLFile := HPGLFile + '.PLT';
- IF xCount = 0 THEN BEGIN
- Color1 := White; Color2 := Color1;
- END;
- x0 := Translate(0, nx); x1 := Translate(0, nx);
- y0 := Translate(0, ny); y1 := Translate(0, ny);
- Assign(f, HPGLFile);
- Reset(f);
- IF IOResult = 0 THEN BEGIN
- scMaxX := GetMaxX;
- scMaxY := GetMaxY;
- wa := GetBkColor;
- SetBkColor(Black);
- Read(f, c);
- LastToken := '*Start*';
- REPEAT
- Parse(xCount, yCount);
- UNTIL EoF(f);
- Close(f);
- END ELSE BEGIN
- RestoreCrtMode;
- Copyright;
- Write('Fehler: ');
- WriteLn('Datei nicht gefunden, ' +
- 'Programm abgebrochen!');
- Exit;
- END;
- END;
- Sound(800); Delay(100); (* Hallo, ich bin fertig! *)
- Sound(400); Delay(100);
- NoSound;
- ModifyColors;
- RestoreCrtMode;
- END;
- END.
-
- (* ----------------------------------------------------------- *)
- (* Ende von PLOT.PAS *)
-