BBS: Inland Empire Archive Date: 09-21-93 (17:47) Number: 18 From: ROB SMETANA Refer#: NONE To: ALL Recvd: NO Subj: Printer Ready -- Test Conf: (2) Quik_Bas
'================ CheckPRN.Bas (Printer Ready) ================== ' ' Please run this and report results. Thanks! ' ' 1st cut: Ron Sharrad ' ' 2nd cut: Rob Smetana (multiple ports, trap more errors, etc.) ' Use as you see fit. '================================================================== DEFINT A-Z DECLARE FUNCTION CheckPRN (PortNum) '...PortNum must be 1, 2 or 3! CLS '...Printer error codes we've seen so far OffLine1 = 87 '...87 Epson 71 HP LaserJet OffLine2 = 71 PaperOut1 = 119 '...we also got 119 w/ the cable off! PaperOut2 = 103 '...119 Epson 103 HP LaserJet NotOn1 = 127 '...127 another author suggested this NotOn2 = 135 '...135 Epson 135 HP LaserJet PrnReady1 = 223 '...223 Epson 223 HP LaserJet PrnReady2 = 222 '...222 another author suggested this PortNotFound = 0 '...no LPT port found FOR PortNum = 1 TO 5 '...Try 1-5 to ensure we can ' trap "invalid port" errors PRINT : PRINT ErrCode = CheckPRN(PortNum) PRINT USING "Code: (####). LPT# is "; ErrCode; PortNum; SELECT CASE ErrCode CASE PortNotFound PRINT "nowhere to be found!"; CASE OffLine1, OffLine2 PRINT "off line!"; CASE PaperOut1, PaperOut2 PRINT "out of paper (or cable's not connected)!"; CASE NotOn1, NotOn2 PRINT "turned off! "; CASE PrnReady1, PrnReady2 PRINT "ready!"; CASE IS > 250 PRINT "NOT a valid port number. Set PortNum to 1 - 4!"; CASE ELSE PRINT "(who knows). Unknown error code. Report this."; END SELECT NEXT ' FUNCTION CheckPRN (PortNum) '...Printer ready function ' '...<rws> check any port (not just #1) '...PEEK into the BIOS data segment. Addresses of LPT ports ' (words/integers) are at offset 8, 10, 12, etc. Since LPT ' ports are actually numbered 0, 1, etc., use "(PortNum - 1)" ' below. OffSet = 8 + ((PortNum - 1) * 2) '...yields 8, 10, 12, etc. DEF SEG = &H40 'Sharrad's original (LPT1): PrnPrt& = PEEK(9) * &H100 + PEEK(8)+1 PrnPort& = PEEK(OffSet + 1&) * 256& + PEEK(OffSet) '... if PrnPrt& = 0, that printer port does NOT exist IF PrnPort& = 0 THEN CheckPRN = PrnPort& ELSE CheckPRN = INP(PrnPort& + 1&) END IF DEF SEG END FUNCTION $$ --- RBBSMail 17.3A * Origin: PCUG BBS - San Francisco HST/V.32 415-621-2609 (RBBS 1:125/41.0)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET