Unit Myprint; {$D-,I-,S-} Interface Uses Dos; Var Prt : Array[1..2] of Text; Lst : Text Absolute Prt; Function PrinterStatus(p: Byte): Byte; Function PrinterReady(Var b : Byte; p: Byte): Boolean; Implementation Procedure RawMode(Var L); { make sure that device is in raw mode } Var regs : Registers; begin With regs do begin bx := TextRec(L).Handle; { place the File handle in bx } ax := $4400; { setup For Function $44 sub-Function 0 } MSDos(regs); { execute Dos Function } dl := dl or $20; { bit 5 = raw mode } dh := 0; { set dh to zero } ax := $4401; { setup For Function $44 sub-Function 1 } MSDos(regs) { execute Dos Function } end; { With } end; { RawMode } Function PrinterStatus(p: Byte): Byte; { Returns the Printer status. LPT1=p=1, LPT2=p=2 } Var regs : Registers; { from the Dos Unit } begin With regs do begin dx := p - 1; { The Printer number } ax := $0200; { The Function code For service wanted } intr($17,regs); { $17= ROM bios int to return Printer status} PrinterStatus := ah;{ Bit 0 set = timed out } end; { 1 = unused } end; { 2 = unused } { 3 = I/O error } { 4 = Printer selected } { 5 = out of paper } { 6 = acknowledge } { 7 = Printer not busy } Function PrinterReady(Var b : Byte; p: Byte): Boolean; begin b := PrinterStatus(p); PrinterReady := (b = $90) { This may Vary between Printers } end; begin assign(Prt[1],'LPT1'); reWrite(Prt[1]); RawMode(Prt[1]); assign(Prt[2],'LPT2'); reWrite(Prt[2]); RawMode(Prt[2]); end.