[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]