The status of the printer port and registers can be determined by querying the printer device. The information returned will vary depending on the type of printer - parallel or serial - selected by the user. If parallel, the data returned will reflect the current state of the parallel port; if serial, the data returned will reflect the current state of the serial port. You query the printer device by passing an iostdreq to the device with prd_query set in io_command and a pointer to a structure to hold the status set in io_Data. struct PStat { UBYTE LSB; /* least significant byte of status */ UBYTE MSB; /* most significant byte of status */ }; union printerIO *PrintIO; struct PStat status; PrintIO->ios.io_Data = &status; /* point to status structure */ PrintIO->ios.io_Command = PRD_QUERY; DoIO((struct IORequest *)request); The status is returned in the two UBYTES set in the io_Data field. The printer type, either serial or parallel, is returned in the io_Actual field. io_Data Bit Active Function (Serial Device) ------- --- ------ ------------------------ LSB 0 low reserved 1 low reserved 2 low reserved 3 low Data Set Ready 4 low Clear To Send 5 low Carrier Detect 6 low Ready To Send 7 low Data Terminal Ready MSB 8 high read buffer overflow 9 high break sent (most recent output) 10 high break received (as latest input) 11 high transmit x-OFFed 12 high receive x-OFFed 13-15 high reserved io_Data Bit Active Function (Parallel Device) ------- --- ------ -------------------------- LSB 0 high printer busy (offline) 1 high paper out 2 high printer selected 3 - read=0; write=1 4-7 reserved MSB 8-15 reserved io_Actual 1-parallel, 2-serial