home *** CD-ROM | disk | FTP | other *** search
- unit Aus_Crt;
- (* Gibt die PCL-Grafikdaten auf dem Bildschirm aus *)
-
- interface
-
- const MaxBuff = 16000; (* bietet viel Reserve für DIN A2 ... *)
- type BufferTyp = array[1..MaxBuff] of byte;
- var GrafikModus : boolean;
-
- function B_to_Str(B_Param : boolean) : string;
- (* Hilfsfunktion für Fehlermeldungen etc. *)
-
- function R_to_Str(R_Param : real) : string;
- (* Hilfsfunktion für Fehlermeldungen etc. *)
-
- procedure Fehler(Meldung,Kennung: string);
- (* Gibt Fehlermeldungen aus *)
-
- procedure AusgabeInit(Breite,Hoehe : integer;
- DateiName : string;
- Aufloesung : integer;
- Not_Used : integer);
- (* Initialisiert die Werte für den Maßstab etc. *)
-
- procedure AusgabeExit;
- (* Schaltet wieder auf Text um *)
-
- procedure AusgabeDaten(Daten : BufferTyp;
- Anzahl : integer;
- X_Pos : integer;
- Y_Pos : integer);
- (* Gibt eine Pixelzeile aus *)
-
-
- implementation
-
- uses Crt, Graph;
-
- var Max_X : integer;
- Max_Y : integer;
- Fak_X : real;
- Fak_Y : real;
- AnzPix : integer;
-
- function B_to_Str(B_Param : boolean) : string;
- begin
- if B_Param then B_to_Str := 'TRUE'
- else B_to_Str := 'FALSE';
- end;
-
- function R_to_Str(R_Param : real) : string;
- var R_Str : string;
- begin
- if R_Param = int(R_Param) then str(R_Param:1:0,R_Str)
- else str(R_Param:1:3,R_Str);
- R_to_Str := R_Str;
- end;
-
- procedure Fehler(Meldung,Kennung: string);
- begin
- if GrafikModus then RestoreCRTMode;
- writeln;
- writeln('Fehler ',Meldung,': <',Kennung,'> [CR]');
- readln;
- if GrafikModus then SetGraphMode(GetGraphMode);
- end;
-
- procedure AusgabeInit(Breite,Hoehe : integer;
- DateiName : string;
- Aufloesung : integer;
- Not_Used : integer);
- var Treiber : integer;
- Modus : integer;
- ErrorC : integer;
- begin
- DirectVideo := False;
- Treiber := Detect;
- InitGraph(Treiber,Modus,'D:\T55');
- ErrorC := GraphResult;
- if ErrorC <> 0 then
- begin
- Writeln('Grafikfehler : ', GraphErrorMsg(ErrorC));
- Halt;
- end;
- GrafikModus := true;
- Max_X := GetMaxX;
- Max_Y := GetMaxY;
- Fak_X := Max_X / Breite;
- Fak_Y := Max_Y / Hoehe;
- AnzPix := Aufloesung;
- end;
-
- procedure AusgabeDaten(Daten : BufferTyp;
- Anzahl : integer;
- X_Pos : integer;
- Y_Pos : integer);
- var Lauf : integer;
- X_I : integer;
- D_B : byte;
-
- procedure PaintByte(B : byte; X,Y,P : integer);
- const Bits : array[0..7] of byte
- = (128,64,32,16,8,4,2,1);
- var P_X, P_Y : integer;
- Lauf, PL : integer;
- begin
- if B > 0 then
- for Lauf := 0 to 7 do
- begin
- if B and Bits[Lauf] > 0 then
- begin
- P_X := round((X + Lauf * P) * Fak_X);
- P_Y := round(Y * Fak_Y);
- for PL := 0 to pred(P)
- do PutPixel(P_X + PL,P_Y,White);
- end;
- end;
- end;
-
-
- begin
- X_I := X_Pos;
- for Lauf := 1 to Anzahl do
- begin
- D_B := Daten[Lauf];
- if D_B > 0
- then PaintByte(D_B,X_I,Y_Pos,AnzPix);
- inc(X_I,8 * AnzPix);
- end;
- end;
-
- procedure AusgabeExit;
- begin
- SetTextStyle(DefaultFont, HorizDir,1);
- SetColor(Yellow);
- OutTextXY(1,1,'Fertig');
- readln;
- CloseGraph;
- GrafikModus := false;
- end;
-
- begin (* Initialisierung der Unit *)
- GrafikModus := false;
- end.
-
- @bu = Diese Unit simuliert einen Laserdrucker am Bildschirm