'=========================================================================== ' Subject: PRINTER LPT PORT STATUS Date: 01-05-97 (06:16) ' Author: Mike Ginger Code: QB, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: INTERRPT.ABC '=========================================================================== '--------------------------------------------------------------------- ' Note that you will need to invoke QuickBASIC with the '/L' option, ie: ' QB /L ' Freeware from Mike Ginger '--------------------------------------------------------------------- '$INCLUDE: 'QB.BI' Printers: CLS PRINT "LPT No."; TAB(10); "Address"; PRINT TAB(23); "Bit Number and Status"; TAB(57); "Meaning" PRINT TAB(23); "0 1 2 3 4 5 6 7" PRINT "-------"; TAB(10); "---------"; PRINT TAB(23); "-----------------------------"; PRINT TAB(57); "---------------------" Printerloop: LOCATE 4, 1 LptPeeker% = 7 FOR LptNum% = 1 TO 3 STEP 1 '--------------------------------------------------------------------- ' Routine to get Printer Port Address's DEF SEG = 64 Temp1$ = HEX$(PEEK((LptNum% + 1) + LptPeeker%)) Temp2$ = HEX$(PEEK((LptNum%) + LptPeeker%)) LptAddr$ = Temp1$ + Temp2$ DEF SEG LptPeeker% = LptPeeker% + 1 PRINT LptNum%; TAB(10); LptAddr$; "h"; TAB(20); '--------------------------------------------------------------------- ' Routine to Check status of the Printer: DIM inregLptStat AS RegType DIM outregLptStat AS RegType low% = &O0: high% = &O2 inregLptStat.AX = low% + (256 * high%) inregLptStat.dx = LptNum% - 1 CALL INTERRUPT(&H17, inregLptStat, outregLptStat) PrnStatus% = outregLptStat.AX \ 256 ' Value will be non-zero if bit is set: Bit Meaning ' --- ------- PRINT USING "####"; outregLptStat.AX \ 256 AND 1; ' 0 Timeout PRINT USING "####"; outregLptStat.AX \ 256 AND 2; ' 1 unused PRINT USING "####"; outregLptStat.AX \ 256 AND 4; ' 2 unused PRINT USING "####"; outregLptStat.AX \ 256 AND 8; ' 3 I/O error PRINT USING "####"; outregLptStat.AX \ 256 AND 16; ' 4 Selected PRINT USING "####"; outregLptStat.AX \ 256 AND 32; ' 5 Out of Paper PRINT USING "####"; outregLptStat.AX \ 256 AND 64; ' 6 Acknowledge PRINT USING "####"; outregLptStat.AX \ 256 AND 128; ' 7 Not Busy ' Further Information: ' If bits are set PrnStatus%= Means ' --------------- ----------- ------------------------------- ' 4 AND 7 (Dec -112) Printer On-Line and Ready ' 4 (Dec 16) Printer On-Line and Busy ' 3 AND 6 AND 7 (Dec -56) Printer is Switched Off ' 3 AND 6 (Dec 72) Printer is Switched Off ' 7 (Dec 128) Printer is Switched Off ' 5 (Dec 32) Printer is Switched Off ' 5 AND 7 (Dec -96) Printer is Switched Off ' 3 AND 7 (Dec -120) Printer is Off-Line ' 3 (Dec 8) Printer is Off-Line ' 3 AND 4 (Dec 24) Printer is Off-Line ' 3 AND AND 4 AND 7 (Dec -108) Printer is Off-Line ' 3 AND 5 AND 7 (Dec -108) Printer is Out of Paper ' 3 AND 5 (Dec 40) Printer is Out of Paper ' 3 AND 4 AND 5 (Dec 56) Printer is Out of Paper ' 3 AND 4 AND 5 AND 7(Dec -76) Printer is Out of Paper ' 4 AND 5 (Dec 48) Printer Cable not connected ' 4 AND 5 AND 7 (Dec -80) Printer Cable not connected PRINT TAB(55); " ("; IF LptAddr$ = "00" THEN PRINT "No Port Exists "; ELSEIF PrnStatus% = -112 THEN PRINT "On-Line and Ready "; ELSEIF PrnStatus% = -56 OR PrnStatus% = 72 OR PrnStatus% = 128 THEN PRINT "Switched Off "; ELSEIF PrnStatus% = -96 OR PrnStatus% = 32 THEN PRINT "Switched Off "; ELSEIF PrnStatus% = 8 OR PrnStatus% = -120 THEN PRINT "Off-Line "; ELSEIF PrnStatus% = 24 OR PrnStatus% = -108 THEN PRINT "Off-Line "; ELSEIF PrnStatus% = 16 THEN PRINT "On-Line and Busy "; ELSEIF PrnStatus% = 40 OR PrnStatus% = -108 THEN PRINT "Paper Out "; ELSEIF PrnStatus% = 56 OR PrnStatus% = -76 THEN PRINT "Paper Out "; ELSEIF PrnStatus% = 48 OR PrnStatus% = -80 THEN PRINT "Cable Not Connected"; ELSE PRINT "General Error "; END IF PRINT ")" NEXT LptNum% '--------------------------------------------------------------------- pause$ = INKEY$ IF pause$ <> CHR$(27) GOTO Printerloop '---------------------------------------------------------------------