home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* HARDCOPY.PAS *)
- (* HARDCOPY-Bibliothek *)
- (* (C) 1989 by W. Amslinger, P. Kurzweil & TOOLBOX *)
- (* ------------------------------------------------- *)
-
- UNIT HardcopyBib;
-
- INTERFACE
-
- USES Dos, Crt, Printer, Graph;
-
- TYPE
- strg255 = STRING[255];
- VAR
- Regs : Registers;
-
- PROCEDURE HardCopyOn;
- { Methode1: Aktiviert [SHIFT PrtScr] }
- PROCEDURE HardCopyOff;
- { Desaktiviert [SHIFT PrtScr] }
- PROCEDURE TestHardCopy;
- { Methode2: Hardcopy mit anderer Taste }
-
- IMPLEMENTATION
-
- CONST
- LPT = 1;
- { Schnittstelle 1 = LPT1:, 2 = LPT2:, 3 = LPT: }
- VAR
- OldVec, NewVec : POINTER;
- error, active : BOOLEAN;
-
- PROCEDURE PrintByte(ch : CHAR);
- { Zeichen auf Parallelschnittstelle ausgeben }
- VAR
- status : BYTE;
- i : WORD;
- BEGIN
- error := FALSE; i := 0;
- REPEAT
- i := Succ(i); { Printer status }
- Regs.ah := $02;
- Regs.dx := LPT - 1;
- Intr($17, Regs);
- status := Regs.ah;
- error := ((status AND $29) > 0); { 00101001 }
- IF i > 20000 THEN BEGIN
- error := TRUE;
- Exit;
- END; { Timeout }
- UNTIL ((status AND $90) XOR $90) = 0;
- Regs.ah := $00;
- Regs.dx := LPT - 1;
- Regs.al := Ord(ch); { Byte senden }
- Intr($17, Regs);
- END;
-
- PROCEDURE PrintString(s : strg255);
- { String auf Parallelschnittstelle ausgeben }
- VAR
- i : INTEGER;
- BEGIN
- error := FALSE;
- FOR i := 1 TO Length(s) DO BEGIN
- PrintByte(s[i]);
- IF error THEN Exit;
- END;
- END;
-
- {$I HARDCOPY.INC }
-
- {$F+}
- PROCEDURE HardCopy; INTERRUPT;
- { Aufruf über [SHIFT PrtScr] }
- BEGIN
- IF NOT active THEN BEGIN
- active := TRUE;
- error := FALSE;
- IBMHardCopy;
- IF error THEN Write(#7#7#7);
- active := FALSE;
- END;
- END;
- {$F-}
-
- PROCEDURE HardCopyOn;
- { Aktiviert [SHIFT PrtScr]-Taste }
- BEGIN
- NewVec := @HardCopy;
- { Interrupt 5 startet Prozedur Hardcopy }
- GetIntVec($5, OldVec);
- SetIntVec($5, NewVec);
- active := FALSE;
- END;
-
- {$F+}
- PROCEDURE HardCopyOff;
- { Deaktiviert [SHIFT PrtScr]-Taste }
- BEGIN
- SetIntVec($5, OldVec);
- END;
- {$F-}
-
- PROCEDURE TestHardCopy;
- { Löst Hardcopy mit *-Taste aus }
- VAR
- ch : CHAR;
- BEGIN
- REPEAT
- ch := ReadKey;
- IF ch = '*' THEN BEGIN
- IF ((GetMaxX = 719) AND (GetMaxY = 347)) THEN
- IBMhardcopy;
- IF error THEN BEGIN
- Write(#7#7#7);
- Exit;
- END;
- END;
- UNTIL ch IN ['*',#27,#13];
- { ESC oder RETURN -> Abbrechen }
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von HARDCOPY.PAS *)
-