Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!uakari.primate.wisc.edu!aplcen!ginosko!uunet!mcsun!ukc!warwick!ecctp From: ecctp@warwick.ac.uk (Dr J A K Cave) Newsgroups: comp.binaries.ibm.pc.d Subject: Re: Capturing Printer (eg PS) output to file Summary: Documentation for PRNDSK Message-ID: <238@orchid.warwick.ac.uk> Date: 12 Sep 89 10:48:29 GMT References: <236@orchid.warwick.ac.uk> Reply-To: ecctp@warwick.ac.uk (Dr J A K Cave) Organization: Computing Services, Warwick University, UK Lines: 370 Code will be posted in a week if no copyright problems surface. Please advise. PRNDSK Version 1.00 A Printer-To-Disk Redirector INTRODUCTION ------------ PRNDSK is a utility that redirects output intended for a printer or communications port and sends it to a disk file or other device. It is intended to make it easy to capture disk copies of printed output and screen dumps. It can also be used to discard printer output by redirecting it to the NUL device, and you can even use disk files as "virtual printers" if your computer does not have the printer ports you need. PRNDSK is written for the IBM PC and closely compatible computers, running MS-DOS version 2.00 or later. Although it tries hard to be reliable, it is very likely that there are computers and programs with which it will not work. If you have problems, or suggestions for improvements, contact the author: David H. Rifkind 3993 N. Campbell Ave., #53 Tucson, Arizona 85719 BIXMail: drifkind PRNDSK and this document are copyright 1987. SYNOPSIS -------- There are three basic formats for the PRNDSK command: 1. PRNDSK [/C][/F] Displays information about devices currently being redirected, or closes all files (/C), or flushes them to disk (/F) while leaving them open. 2. PRNDSK device [/C][/F][/N][/T] Displays redirection information about the specified device, or closes its redirection file (/C), flushes it to disk (/F), or sets or clears the transparency mode (/N, /T). 3. PRNDSK device=filespec [/A][/T] Begins redirecting a device to the file specified. The /A switch is used to append to an already existing file, and /T to set the transparent redirection mode. "Device" may be one of the following names: LPT1 through LPT3 Printer ports 1 to 3 COM1 or COM2 Serial ports 1 and 2 PRN Same as LPT1 AUX Same as COM1 "Filespec" may be any unambiguous file specification. Legal examples include: PRINTER.TXT A:COM1.TXT ..\LISTING C:\DEVEL\PRINTER.TXT NUL REDIRECTING OUTPUT ----------- ------ To direct output intended for a printer or serial port to a file, enter the following command: PRNDSK device=filespec "Device" should be replaced by the name of an output device: LPT1, LPT2, LPT3, COM1, COM2, PRN or AUX. "Filespec" is replaced by the name of a file to receive the output. Here is an example of a legal command: PRNDSK PRN=PRINTER.TXT This will result in output to the printer being sent instead to the file PRINTER.TXT in the current drive and directory. A drive and path name may also be included in the filespec: PRNDSK COM1=C:\FILES\LOGFILE.COM In fact, "filespec" may be any MS-DOS file or device name, including CON, NUL, or even a printer or serial port! If output is redirected to a serial port or printer port, it is not further redirected. To make this clear (or at least clearer): PRNDSK PRN=COM1 PRNDSK COM1=COMM.TXT In this example, output sent to the PRN device will go to serial port number 1; it will NOT go to the file COMM.TXT. There are two switches which may be included with this form of the PRNDSK command. The /A switch: PRNDSK device=filespec/A causes data to be appended to the output file. If the /A switch is not included, the file will be erased before beginning output. The /T switch: PRNDSK device=filespec/T results in transparent output--characters output will go to both the redirection file AND to the specified device. This allows you to make both a soft and a hard copy at the same time. Once redirection to a file is begun, the disk containing that file should not be removed. Close the file (see OUTPUT CONTROL) first. OUTPUT CONTROL ------ ------- To close an output file and terminate redirection for that device, use this command: PRNDSK device/C or PRNDSK/C The second version closes all files and terminates all redirection. PRNDSK also lets you flush an output file, that is, update the file directory information on the disk without closing it. Make whatever use of this that you can: PRNDSK device/F or PRNDSK/F DEVICE STATUS ------ ------ To keep track of what devices you have redirected, PRNDSK will show you the status of each device it handles. To find out to what file a given device is being directed, enter: PRNDSK device For example: PRNDSK PRN The reply might be: LPT1=C:\FILES\PRINTER.TXT If the device is set for transparent redirection, the file name will be followed by a "/T": LPT1=C:\FILES\PRINTER.TXT/T If redirection to the file has been stopped due to a DOS error, the error message will be shown after the file name: LPT1=C:\NONESUCH\PRINTER.TXT Path not found Finally, if the device in question is not being redirected, there will be no reply. To list all devices being redirected, type: PRNDSK Note: the way the filename is reported varies slightly with different versions of MS-DOS. In DOS 2.xx, the filename is reported exactly as you entered it. In DOS 3.xx, the complete unambiguous filespec is given. PRNDSK PRN=..\FILES\PRINTER.TXT DOS 2.xx: LPT1=..\FILES\PRINTER.TXT DOS 3.xx: LPT1=C:\SUBDIR\FILES\PRINTER.TXT CHANGING MODES -------- ----- A redirected device may be switched into and out of the transparent mode using one of the following commands: PRNDSK device/T to set transparent mode PRNDSK device/N to clear transparent mode "/N" is a mnemonic for "not transparent", and deserves an award as one of the least mnemonic mnemonics ever. ERROR HANDLING ----- -------- If any DOS error occurs while PRNDSK is trying to write to a file, the associated device will become "inactive". Attempts to write to the device will generate printer I/O errors (for the printer ports) or timeout errors (for the serial ports). The device will remain inactive until it is closed (by PRNDSK/C). COMPATIBILITY ------------- PRNDSK intercepts the IBM PC's BIOS INT 14h and INT 17h vectors (the serial and printer service interrupts). It may not work correctly with other programs which also take over those vectors. In most cases, PRNDSK will work with printer buffer software if it is loaded AFTER that software. Due to the design of the IBM PC's ROM BIOS, a great number of programs that use the serial ports will not work with PRNDSK. However, if your serial ports are being used for simple output devices such as printers or plotters, it should work. Don't be surprised, though, if your modem attached to COM2 prevents your using PRNDSK with the printer attached to COM1. PECULIARITIES ------------- "Peculiarity" is the word we have chosen to describe some of the stranger aspects of PRNDSK's operation. The word "feature" might also be used. Use of the term "bug" is frowned upon. In order to work correctly with DOS, PRNDSK keeps track of calls to the various DOS services. This allows it to decide when it is safe to write to the disk, and when to wait for a better time. It is not always possible to make this decision correctly, so PRNDSK adopts a conservative approach: it never writes to the disk unless it is quite sure that it is safe. Under some circumstances, it may be impossible to write to the disk for a considerable period of time. When this happens, PRNDSK can lose some characters which were sent to the printer. This is rare, and may happen with some programs and not with others. One simple example which will demonstrate this is: COPY somefile PRN where "somefile" is more than about 2K bytes long. There is no apparent good solution for this problem. Another peculiarity has to do with opening files. Under some circumstances, this sequence of commands: CHDIR \FIRST PRNDSK PRN=PRINTER.TXT CHDIR \SECOND will result in PRINTER.TXT appearing in directory SECOND instead of FIRST. This will happen only (1) when using DOS 2.xx and (2) the first time that PRNDSK is run (that is, if PRNDSK is already resident in memory, this will not happen). If this behavior causes a problem, you can follow the first PRNDSK command with: PRNDSK PRN/F which will ensure that the file ends up in the correct directory. PROGRAM NOTES ------- ----- This is the first publicly released version of PRNDSK. There are other programs that do about the same thing. I hope that PRNDSK is more reliable and more functional than the others. I also hope that you find it useful. This first version is fairly rough in several ways. Since it uses a 2K buffer for each of five devices, over 8K of memory is wasted if only one is being redirected. There are also all those darned "peculiarities" (see above). If there is enough interest in PRNDSK, I might get ambitious and make improvements. This is copyrighted material. No fee is charged for its use. You may reproduce and distribute it as you see fit, but please do not distribute modified or incomplete copies. 28 Feb 1987