L P Tz a P R I N T E R R E D I R E C T O R v 3.00 COPYRIGHT (c) 1990 by James P. Morgan ALL RIGHTS RESERVED This document describes the LPTz printer redirector program, which was created by James P. Morgan, in February of 1990. Shareware version 3.00 is initially being distributed on --------- 1). THE PUBLIC (software) LIBRARY P. O. Box 35705 Houston TX 77235-5705 Ph :713-721-5205 - 713-721-6104 2). PC ROCKLAND BBS - NY (bulletin board, one of the BEST) Download file : LPTzV300.ZIP Ph :914-353-2538 (open public - non-subscribers) 914-353-2157 (paid subscribers only) DISCLAIMER OF ALL WARRANTIES AND LIABILITY ------------------------------------------ James P. Morgan ("supplier") makes no warranties, either expressed or implied, with respect to this documentation or with respect to the software described in this publication, its quality, performance, merchantability or fitness for any particular purpose. The software is sold or licensed "as is". The entire risk as to its quality and performance is with the buyer. Should the programs prove defective following their purchase, the buyer (and not the suppliers, not their distributor or retailer) assumes the entire cost of all necessary servicing, repair, or correction and any incidental or consequential damages. In no event will suppliers be liable for direct, indirect, incidental or consequential damages resulting from any defect in the software, even if suppliers have been advised of the possibility of such damages. Some states do not allow the exclusion or limitation of implied warranties or liability for incidental or consequential damages, so the above limitation or exclusion may not apply to you. i I N T R O D U C T I O N ----------------------- Welcome to LPTz! LPTz is a printer redirector. What this means is that LPTz will intercept (capture) the data that is directed to a printer (i.e. LPT1/LPT2/LPT3) and send the data to a disk file. Why would you want to do this?. Well, some programs don't allow their printer output to be sent directly to a disk file, so LPTz could 'add' this function to such a program. Then you could 'use' the captured printer data later, say to give to someone else or perhaps to delay physical printing. Your real printer may not have been available at the time you needed to generate the print output. You don't have a printer!. Unusual, but you don't need a real printer to use LPTz. LPTz allows you to print to a real or phantom printer. You can use LPT2 and/or LPT3 even if they are not physic- ally attached to your personal computer. Another TSR you say!. Well LPTz allows YOU to specify how much of your computers memory you want to use for LPTz. And LPTz allows you to completely remove it from memory when you wish. LPTz is feature-rich, flexible and friendly. LPTz will handle most all your needs and if you change your mind, will adjust to suit you and will let you know what it is supposed to be doing, if you ask. LPTz was 'born' out of the need to provide a stable print re- director product (most available , public domain and Shareware are feature poor or very unstable (read 'buggy'). The 'parents' of LPTz were many. Various articles and source listing from other TSR type products (that delve into the mysteries of DOS). Thanks to the many other 'lites burning bright' that brought about LPTzs successfully 'birth' and growth. BOY, LPTz sounds great!. LPTz tries to be, BUT ("i knew you would say 'BUT'".) even LPTz cannot be all things to all people. LPTz has a few short-comings and we will discuss them later. - 1 - How do I get LPTz to work for me? Glad you asked. As with most things you do on a computer, you either type in a command or click (mouse assumed) on an object in one of the popular GUIs (pronounced 'gooies') that are the rage now- days. With LPTz you have to type the command/letters/words as defined below: Command syntax : (No, not a 'tax' on a vice, yet.) -------------- LPTz [-x -y -z...] the little '[]' are NOT part of the 'sintax' but only indicate that all or none of the 'options' (see following pages) may be specified at any one time. The little "..." means i got tired of entering the '-letters' and will let you pick a few more, as there are quite a few. The '-x'/'-y' mean that there are various options to choose from but they MUST be preceded by a '-'. The options are defined in the following pages (no peeking ahead). If you want graphics mode support on a PC/XT, with an original CGA card, then the DOS command, GRAPHICS.COM, must the run prior to running LPTz (for the first time). For LPTz to function in its simplest form, all that is required for you is to LPTz the printer that you want redirected and the file name that you want the redirected print data written to. For example, you could type: ----------- LPTz -p1 Output4.pr1 this would capture most all DOS printer output directed to LPT1 and send it to a disk file called 'Output4.pr1'. - 2 - OK, so what are all the little '-' options mentioned. Here goes.. Option Option definition ------ --------------------------------------------------- -? LPTz will display a 'help' screen of all its options. NO other options, if any entered with '-?', will be processed (they are ignored). ? SEE '-?' option above -Px The -P option is used to specify the printer, LPT1/LPT2/LPT3, that you want redirected. Obviously the 'x' is 1 or 2 or 3. Neat how this works. Some, but not all the options, require that a printer be specified, for them to work. ONLY one printer can be specified per invocation (word for the day) of LPTz, BUT all 3 printers can be specifed, but you must execute LPTz 3 separate times. Hopefully the next version will remove this restriction. file name The filename is the name of the file that the printer output, that LPTz captures, is to be written to. A fully qualified DOS drive and path name qualifier is supported. A 'special' format of a filename can be defined to allow automatic generation of unique filenames. This allows each file written to a redirected printer to be catalogued separately. (see '-F' option) -A The -A (append) options says to 'add' the redirect- ed printer data to an existing file or create a new file with 'file name' specified and add to it. Internally to LPTz, when a buffer fills , forcing LPTz to flush (write) the buffer, the 'file name' specified is opened , the buffer written and the file immediately closed. This insures that DOS always knows about the true length of the file. This means that the most data that can be lost is the part that is in the buffer and not yet written, perhaps due to power loss ..etc. - 3 - Option Option definition ------ --------------------------------------------------- -O The -O (overwrite) options says to 'create' and even overwrite an existing file (you lose data that was in the existing file). Internally to LPTz, when a buffer fills , forcing LPTz to flush (write) the buffer, the 'file name' specified is opened , BUT never closed until you either force a close ('-c'), remove LPTz from memory ('-u'), a 'file' flush occurs or error writing file occurs. The 'bad/good' thing about using the the '-o' is that DOS does not know about the length of the file until its closed. In other words it has a '0' length until closed. You can write thousands of bytes of data to the file but DOS and other programs will think that there is nothing in the file , until you want them to. A word of warning, DON'T run any utilities that sort the DOS directory (Norton DS) or compress the disk while LPTz is loaded, as you will wind up with lost clusters if you run CHKDSK or LPTz will cease to function correctly. -C The -C (Close) option causes LPTz to flush all buffers for a specific printer and to stop redirecting printer data. After '-C' option executed, any data directed to a printer will start printing to a real printer, if its available. -Bxx The -B option allows you to specify the size of the buffers to be allocated to all 3 printers. The buffer sizes allowed are from 4 to 64k (or 0), where 'k' means 1024 bytes times the number specified as 'xx'. The default is 4k, enough for a print-screen. The buffer size for re-directed printer may be changed at any time, when the print buffer is empty. Each printer can have its own buffer and size. In otherwords, dynamically allocated buffers. Obviously, the smaller the buffer size the more work LPTz has to do in writing filled buffers to disk. The larger the buffer size, the less memory you have available for other programs. - 4 - Option Option definition ------ --------------------------------------------------- -Fxxx The -F option allows you to specify that a flush of any partly filled buffers, for a specific printer, be automatically written. The automatic flush occurs after 'xxx' number of seconds have elapsed and nothing new has been written to the buffer. This insures that there will be very little chance of data loss, in case of loss of power or PC re-booted. There was a requirement, on a network, to redirect printer output to a disk file on a server. The disk was a 'virtual' disk on a VAX computer. The output was redirected to a 'special' DOS filename. A program running on the VAX server would 'look' for a file with a specific extension and 'copy' it to its own real disks for further processing. When LPTz is used with the '-F' option and printer output is redirected to a 'special' name, a certain sequence of events occurs. First, when you invoke LPTz you MUST specify that auto- buffer flushing is to occur. Specify the number of seconds from 5 to 300. Specifying a value of zero(0) seconds disables auto-buffer flush if it is activated. You can reactive it later by specifying another non-zero value. Secondly, you MUST specify that printer redirection be written to a file name of the following format: 1). the filename MUST NOT have an extension 2). the FIRST THREE characters of the filename must be numeric. This is the events that will occur: 1). all print data will be redirected to 'special' filename. 2). after 'xxx' number of seconds have elapsed and nothing has been written to file (given that something has been, at least once), the buffers for the specific printer is flushed. Next the file is renamed and a new file with the same name that LPTz was invoked with is reopened as empty. Forcing a file/buffer close with '-C' option , de-installing LPTz or disk error also causes the above event to occur. - 5 - Option Option definition ------ --------------------------------------------------- -Fxxx You are not sure how this works? OK, lets take an example: You invoke LPTz : LPTZ -p1 -f30 000-lpt1 this says, redirect LPT1 to a disk file called '000-lpt1' and perform automatic buffer flush every 30 seconds. Then , given that something has been written to the file, when the 30 seconds elapses: 1). the buffers are flushed to '000-lpt1' 2). a file called '001-lpt1.txt' is deleted, if it exists. 3). the file '000-lpt1' is renamed to '001-lpt1.txt' 4). a new internal next-filename of '002-lpt1.txt' is generated, if needed the next time. 4). a new file called '000-lpt1' is open/created and all future printer redirected data is written to it until the flush timeout limit again occurs. A few notes/insights are necessary here. With auto-file flush its best to start off with '000' and let LPTz internally increment the file name number. When LPTz gets to '999' internally, it starts back with '001'. So, you see that '000' is a safe filename number to start off with. However, to provide maximum flexibility you can start off with any 3-digit filename BUT only '000' is protected from being over written. The next release will protect the original filename and insure that other redirected filenames (for other printers) are not duplicat- ed. - 6 - Option Option definition ------ --------------------------------------------------- -M The -M option toggles the state of the mode that the popup window is displayed in. If monochrome-mode not active then the popup window will display in color, else the popup window will be black-and-white. Invoking LPTz with this option toggles the state, if off it will be turned on else if on it will be turned off. -L The -L option toggles the state of Line-feed stripping. With this option active all line-feed characters are stripped before being written to redirect disk file. -G The -G option allows LPTz to pop-up over a graphics applicaton. YES, you heard right, a GRAPHICS application. This is done WITHOUT swapping out the current applica- tion and changing to text mode. LPTZ attempts to pop-up in the SAME current graphics mode. We have looked high and low and we can find NO other TSR (that does what we do) that supports Graphics pop-up. HOWEVER, this is our first attempt. We bought 8-10 books on CGA/EGA/VGA and could not find ONE that tells/shows how to safely/best pop-up and exit in/from graphics mode application. This release is NOT totally perfect, but we decided to release it, to get feedback on the added graphics mode support. If the -G option is not specified, LPTz will not pop-up if the video controller is in a graphics mode. The Hercules graphics modes are not supported at this time. If someone wants to make available such a card for testing (and if enough demand) then we will consider supporting it. The EGA and VGA cards have the necessary graphics fonts vectored correctly to allow 'text' to be drawn while in graphics mode. The IBM PC/XT CGA BIOS do not set up the interrupt vectors (pointers to graphics mode text characters) to allow LPTz to work correctly. You MUST run the DOS supplied program, GRAPHICS.COM to allow LPTz to pop-up in graphics mode, and to display text. It best to include the GRAPHICS command in you system startup batch file, AUTOEXEC.BAT. LPTz simulates the EGA BIOS vector setup in this hardware configuration. - 6a- Option Option definition ------ --------------------------------------------------- -S The -L option toggles the state of some internal beeps and honks that can be turned on. If sound option on then every time a buffer fills you will hear a couple of short beeps. This is some indication that your buffer sizes are too small, if you hear alot of beeps often. Disk error will generate a bunch of beeps and honks reguardless of this options setting. -U The -U (last but not least) allows you to completely remove LPTz from you computers memory. LPTz will be removed, given that NO other TSRs or programs have changed the interrupt vectors that LPTz used when it started. All redirected disk files are closed, after buffers flushed, and all memory allocated to buffers is returned to DOS. Then all interrupt vectors are returned to the state that LPTz was aware of when it was initially invoked. - 7 - Whew! That's alot of verbiage to absorb, the first time thru. Its not as confusing as it may appear. We just want to document all the in-and-outs, so can use LPTz to the max. Again, LPTz can't be all things to all people (or DOS). LPTz tries to do things in the background, while your applications are running in the foreground. Given that DOS was not really designed to support this, in all cases, LPTz can't redirect all printer requests. Specifically, the DOS 'TYPE' and DOS 'COPY' commands to a LPT will 'abort' if LPTzs buffers are not large enough to handle the total typed/copied file. In otherwords, if the file is bigger than the buffer LPTz has allocated to the printer, then LPTz will return a 'timeout' to DOS when the buffer fills and you will most likely see an 'abort, retry or ignore' message. LPTz will ONLY capture data that goes thru the BIOS interrupt 17. Any application that writes directly to the hardware cannot/will not be redirected. LPTz intercepts DOS interrupt 21, specifically function calls: 5 - write a character to standard printer 40 - write character(s) to a file. If the file is the standard printer file, file handle 0004, its output is redirected thru LPTzs interrupt 17 handler. 44 - IOCTL call 3, write to character device. Again, if the file handle is 0004, for standard printer, the output is redirected thru LPTzs interrupt 17 handler. DOS interrupt 21 is intercepted for these function calls to allow LPTz to gracefully handle buffer fills. LPTz primarily intercepts the BIOS interrupt 17. This allows it to buffer data for the redirected printers. With LPTz there is NO PROBLEM WITH OVER RUNNING THE BUFFERS. We have seen NO other product (Public domain or Shareware) that CAN handle it. LPTz goes to GREAT lengths to see that all your precious print data is safely handled!! We have lots of ideas for future enhancements to LPTz, as it grows and matures. We are not restricting access to LPtzs functions in version 3.00. However, if usage appears high and registrations low, then we will be forced to restrict options available ,thru Shareware, in future releases. Also, the source is not available but if you are scared of viruses, then use the registration form to get a copy directly from the author. - 8 - What's this 'popup' window that was mentioned earlier. Boy, nothing gets by you! Basically, LPTz provides the feature to allow you to pop-up a window. This window allows you to turn printer redirection on and off while in the middle of another application. However, to turn it on, you must have first redirected a printer to a filename. This only makes sense. LPTz will only pop-up if you are in a text mode applicationn UNLESS you have told LPTz to pop-up over a graphics application (see the '-G' command line option). A mouse is not supported, but could and may very well be in one of the next couple of releases. To get the pop-up window onto the screen you press: either - ALT-Print Screen or ALT-* (on keyboards with separate cursor keys) Pressing either : Enter or Esc will remove the pop-up window from the screen. We are toying with the idea of letting you dynamically change the pop-up windows location. What do you think? - 9 - I have specified all these options to LPTz, how do i know what LPTz is doing. EASY! Just type: LPTz LPTz will tell you every thing you didn't want to know about what it is doing or again you may. If you have the buffer flush option active (see '-F') and data is in the buffers, LPTz will tell you when the next buffer/file flush for each printer is due. How friendly can you get. Another idea we are tossing around is to allow other programs to access LPTz thru API calls (only programmers may understand what we mean here). This would allow other applications to 'talk' to LPTz directly from an application and to query its state or to dynamically modify LPTzs processing state. Now for a few odds-n-ends we missed. Any error writing the buffers immediately disables printer re- direction for a specific printer. If you correct the error, you can turn it back on later, with out re-loading LPTz. You will hear a bunch of beeps and honks if an disk error occurs, such as disk full, removing disk from drive, you deleted LPTz file it was using (naughty), or you ran CHKDSK or disk compress. Oh, PC-Write requires you to gererate a 'pr.def' file and to specify that its print output go to a LPT device, for LPTz to work with PC-Write. Contact PC-Writes technical support if you need help with their product. - 10 - Appendix A - Program Messages. All message text is preceded by a formatted message code. The format of the message code is: LPTzNNNy where : NNN= 000 thru 999, which is the message number for this message type. and y= 'D' - for Diagnostic type messages. These messages are normally printed only if a critical error occurs or the program is in a 'test' or debugging mode. 'E' - for Error messages. These type messages indicate that an unrecoverable error occurred and the program could or could not take any corrective action. 'I' - for Informative messages. These messages are just to inform you as to the processing state of the program at any given time. 'W' - for Warning messages. These messages indicate that an error occurred, but that the program was able to take corrective action and continue processing. However, the function the program was attempting may or may not have been successfully completed. 'P' - a message is displayed that requires you to reply to the program, normally via the keyboard. - A1 - Appendix A - Program Messages. The messages that LPTz generates are not documented in this release. (as they are mostly self-explanatory) - A2 - Appendix B - Site License SITE LICENSE Corporate users may wish to obtain a site license for the use of LPTz. The site license applies only to one geographical area, not to exceed a 50 mile radius. Additional site licenses are required for each unique geographical location. Please use the order form in this manual to request a site license. Site licenses are now negotiated on an individual basis. License fees vary depending on the number of computers on which LPTz will be used. LPTz is ONLY licensed per single unit quantities of, 1 single unit license - $20 each ($10 upgrade fee each) A site license may be requested and will be negotiated on an individual basis. The following page is a license agreement, which should be signed and sent with your payment when ordering a commercial license. - B1 - Commercial License Agreement The use of LPTz in a commercial environment or government organization is granted under the following terms: 1. Payment of the license fee must be made payable to : James P. Morgan The fee is based on the number of computers which will be used to run LPTz , as follows: LPTz is ONLY licensed per single unit quantities of, 1 single unit license - $20 each ($10 upgrade fee each) 2. You may use LPTz on the number of computers included in the license fee. If you have negotiated a site license, then you may use LPTz on any number of computers within your organization, within a given geographical area. 3. You may make copies of the program and documentation, in their original, unmodified form. You may distribute these copies, within the limits of the number of copies licensed. 4. You may use all future Shareware versions of LPTz under this license. 5. You may NOT modify the program or charge a fee for copying or distributing the program or its documentation. 6. It is your responsibility to make the necessary copies and to deliver them to the computers which they will be used on. 7. We are not responsible for anything that may or may not happen if you use LPTz. 8. You are required to complete and sign this form and the ORDER form , and return them to James P. Morgan I agree to abide by the terms and conditions of this license. _____________________________ __________________________ Signature Date _____________________________ Name (please print or type) _____________________________ Title _____________________________ Company - B2 - Appendix C - Ordering ORDER FORM Check which items you wish to purchase: (_) Noncommercial license for the use of LPTz. (_) Commercial license for the use of LPTz on ___ computers (_) Program update fee of $10.00 for each of __ computers that LPTz is currently licensed on. (_) Update media is : (_) 5-1/4 floppy | (_) 3-1/2 micro floppy (_) Payment of $_____ is enclosed (check or money order), | +------> payable to : James P. Morgan ---------- Signature: ________________________________ _______________________________________________ Name _______________________________________________ _______________________________________________ Address ______________________ ________ ____________ City State Zip _______________________________________________ Country *** Send check or money orders payable to : James P. Morgan *** ------------------------------------------------------- (all other endorsements will be returned and order not processed) Send this completed form to: James P. Morgan 5226 Via Hacienda Cr #115 Orlando FL 32809 U.S.A - C1 - For program disk orders outside the U.S., please add an additional $5, and enclose a check or money order payable in U.S. currency and drawn on a U.S. bank. Any checks/money orders that cannot be deposited -------------------- in a U.S. bank WILL be returned without processing of the order. For commercial license orders, please enclose a signed copy of the the license agreement. Inquires for Corporate wide unlimited usage licenses are welcome. - C2 - Appendix D - Comments USER COMMENT FORM If you have found any errors in this documentation that you would like to bring to our attention, please indicate them below. Please indicate them by page number if possible. If there are other improvements to the documentation, product features that you would like us to consider, or any ways you are using LPTz that you would like to share, please indicate them here (for version 3.0): ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ - D1 - Appendix E - Mailing CHANGE OF ADDRESS FORM Please let us know when you change your address, so that we can keep you informed of product improvements, etc. NAME: ______________________________________________________________________ COMPANY:____________________________________________________________________ SERIAL NUMBER:______________________________________________________________ Old Address: ____________________________________________________________________________ ____________________________________________________________________________ CITY:______________________________________STATE:______ZIP:_________________ ____________________________________________________________________________ New Address: ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ CITY:______________________________________STATE:______ZIP:_________________ Telephone:__________________________________________________________________ ____________________________________________________________________________ Effective Date of New Address:______________________________________________ MAIL TO : ----------- James P. Morgan 5226 Via Hacienda Cr #115 Orlando FL, 32809 U.S.A. - E1 -