INFO: Verifying the Printer Connection

ID: Q77467


The information in this article applies to:
  • Microsoft Windows Software Development Kit (SDK) 3.1


SUMMARY

The PC ROM BIOS printer services function Get Printer Status (INT 17H Function 2H) can be used to determine if a printer is connected to a specific port. To save time and potential data loss, an application can use INT 17H Function 2H to determine if a printer is present before entering the application's printing code. This article contains code to make this determination.

NOTE: This same functionality may be obtained in Windows 3.1 using the OpenComm(), WriteComm(), and GetCommError() functions.

Sample Code

The following code defines a function IsPrinter():

   /***************************************************************

   *                                                             *
   *  Name:     IsPrinter - tests if printer is connected        *
   *                                                             *
   *  Parameters:   AX = 02h                                     *
   *                DX = printer number (LPT1 = 0)               *
   *                                                             *
   *  Return    AH = status bits                                 *
   *                 01h    time out                             *
   *                 02h    unused                               *
   *                 04h    unused                               *
   *                 08h    I/O error                            *
   *                 10h    printer selected                     *
   *                 20h    out of paper                         *
   *                 40h    printer acknowledgment               *
   *                 80h    printer not busy                     *
   *                                                             *
   * Function returns 1 if printer connected                     *
   *          returns 0 otherwise                                *
   *                                                             *
   ***************************************************************/ 

   int IsPrinter(void)

   {

   unsigned char iRetVal = 0;

   _asm

   {
      mov   ah, 02h
      mov   dx, 0            /* 0 is number for LPT1: */ 
      int   17h
      mov   iRetVal, ah
   }

   if (iRetVal == 0x90)

   return (1);

   else

      return (0);

   } 
For more information, please refer to "The MS-DOS Encyclopedia" (Microsoft Press). Pages 163 and 164 contain an example of interrupt driven communication with the printer. Appendix O details the ROM BIOS functions and their parameters.

Additional query words:

Keywords : kbcode kb16bitonly kbWinOS310 kbDSupport kbSDKWin16
Version : WINDOWS:3.1
Platform : WINDOWS
Issue type : kbinfo


Last Reviewed: July 2, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.