home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DEVDEMO.PAS *)
- (* Dieses Programm definiert einen eigenen Druckertreiber *)
- (* und gibt einen Text auf dem Drucker aus. *)
- (* (c) 1989 H.Mende & TOOLBOX *)
- (* ------------------------------------------------------ *)
- {$F+}
- PROGRAM DEVICES_DEMO;
-
- USES Dos, Crt, Devices;
-
- CONST
- TimeOut : INTEGER = 91; { ca. 5 Sekunden }
-
- var
- Lpt : TEXT; { Druckertreiber als Ausgabedatei }
- SysClock : LONGINT ABSOLUTE $0040:$006C; { System-Zeit }
-
- { Druckerinitialsierungs-Routine }
- FUNCTION CheckLPT(VAR f : TextRec) : INTEGER;
- VAR
- PortAdr : Word;
- Regs : Registers;
- BEGIN
- PortAdr := MemW[$40:8];
- { Abbruch, wenn nicht vorhanden }
- IF (PortAdr = 0) THEN BEGIN
- CheckLPT := 151; Exit;
- END;
- { Druckerport initialisieren }
- WITH Regs DO BEGIN
- ah := 1;
- dx := 0;
- Intr($17, Regs); { Druckerstatus ermitteln }
- IF ((ah AND $20) <> 0) THEN
- CheckLPT := 159 { IOResult für "PAPER OUT" }
- ELSE
- IF ((ah and $01) <> 0) THEN
- CheckLPT := 160 { IOResult für "TIME OUT" }
- ELSE
- CheckLPT := 0; { alles O.K. }
- END;
- END;
-
- { Ausgaberoutine für Drucker }
- FUNCTION PrintToLPT(VAR f : TextRec) : INTEGER;
- VAR
- Status : BYTE;
- p : INTEGER;
- TimeCount : LONGINT;
- IOPort : WORD;
- BEGIN
- IOPort := MemW[$40:8];
- WITH f DO BEGIN
- FOR p := 0 TO BufPos-1 DO BEGIN
- TimeCount := SysClock;
- { Warten auf "BUSY" }
- REPEAT
- Status := Port[IOPort+1];
- UNTIL (Status >= $80) OR
- (SysClock > TimeCount + TimeOut);
- { IOResult für "TIMEOUT" Fehler }
- IF (Status < $80) THEN BEGIN
- PrintToLPT := 160; Exit;
- END;
- { Papierendekennung überprüfen }
- IF (Status AND $20) <> 0 THEN BEGIN
- PrintToLPT := 159; Exit;
- END;
- { Zeichen an Drucker senden }
- Port[IOPort] := Byte(BufPtr^[p]);
- { Zeichen ins Latch schreiben }
- Port[IOPort+2] := $0D;
- { Zeichen an Drucker senden }
- Port[IOPort+2] := $0C; { Strobe }
- END;
- BufPos := 0; { Buffer zurücksetzen (=leer) }
- END;
- PrintToLPT := 0; { Alles O.K. }
- END;
-
- BEGIN
- { Druckertreiber zuweisen }
- AssignDevice(lpt, @CheckLPT, @Ignore, @PrintToLPT,
- @PrintToLPT, @Ignore);
- Rewrite(lpt);
- WriteLn('Taste drücken wenn Drucker bereit...! ');
- REPEAT UNTIL KeyPressed;
-
- WriteLn(lpt, 'DEVDEMO - Demonstration von DEVICES.TPU');
- WriteLn(lpt);
- WriteLn(lpt, 'Dieser Text wird über den mittels ',
- 'ASSIGNDEVICE zugewiesenen');
- WriteLn(lpt, 'Druckertreiber ausgegeben.') ;
- WriteLn(lpt, 'Ende der Demonstration ... ');
- Close(lpt);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DEVDEMO.PAS *)