FPServer: THE Fast Novell NetWare Print Server Version 3.2 Documentation File (FPSERVER.DOC) ==================================================== Richard L. Hartman (RLH) Novell Registered Professional Developer 5205 North Mulvaney Court, Spokane, WA 99212-1611 509-924-6576 (Voice) 509-926-4626 (Fax) CompuServe 76350,2275 =========================================================================== INTRODUCTION =========================================================================== FPServer implements an EXTREMELY FAST, easy to use print server on a standard IBM compatible personal computer. In this manner, it is very similar to Novell's own PSERVER.EXE. However, unlike Novell's product, FPServer has been optimized for ultra-high data throughput and ease of control. I carry out a great deal of research in the area of network printing. I have spoken with equipment manufacturers, dozens of Network Administrators, and hundreds of users to obtain an understanding of what is important in a networked printing environment. FPServer is one result of this research: THE definitive print server for Novell NetWare networks. This file contains background information, a description of FPServer's features, a complete command list with examples, and technical data on design and architectural decisions. There is a lot of data here, and it does not have to be read sequentially. Feel free to "scan around"! =========================================================================== BACKGROUND (WHY IT EXISTS) =========================================================================== FPServer is a high-speed alternative to "black box" print servers, in-the-printer print server interfaces, and Novell's PSERVER.EXE. FPServer's primary design goal is ULTRA-HIGH DATA THROUGHPUT; its secondary design goal is EASE OF USE. With all due respect to Novell (they write excellent network operating systems), their PSERVER.EXE is simply too slow for today's printing environments. Running on an 80386DX-40 PC with light network traffic, Novell's PSERVER.EXE might attain 6K bytes per second on a parallel port (a more typical figure is 1500-2000 bytes per second). With a typical 300x300 DPI A-size graphic being 400K-500K or larger, Novell's PSERVER can consume four minutes or more just transferring the data to the printer. Its console (screen and keyboard) also leave a lot to be desired. Standalone, "black box" print servers (such as Intel's NetPort and Datacom's Series 8000, among others) also provide too little bandwidth for today's applications. Their data rates (typically 8000 bytes per second) are only marginally better than Novell's PSERVER.EXE - still far too slow for near-megabyte print jobs - and they are generally limited to one or two printers per box. Furthermore, neither "black box" nor in-the-printer interface cards have means for intelligent local control. Their consoles are even worse than Novell's PSERVER - they have none at all. Controlling these devices involves running back and forth between the printer and a PC: You can't see what's happening when you're at your workstation, and you can't do anything about it when you're at the printer! Such inconvenience and limited speed hardly justifies a price tag of $500 or more EACH. In contrast, FPServer can sustain data rates of 100,000 BYTES PER SECOND on a 386DX-40's parallel ports. This reduces the transfer time of that 500K graphic from four minutes to FIVE SECONDS (assuming the printer can accept data that rapidly). FPServer can drive up to SEVEN printers from a single host PC. And FPServer suffers little or no throughput impact when servicing multiple print devices. A dynamic linking/unlinking algorithm eliminates the overhead associated with idle print devices, and a real-time throughput analysis algorithm optimally distributes available bandwidth between active print jobs. FPServer puts the limiting factor where it belongs: your printer, instead of your network. FPServer's data rate is nearly always faster than that of the printers it is driving, which means shared printers are kept busy more of the time and users are kept waiting less of the time. Even an old 8088-based 4.77MHz IBM PC can sustain nearly 10,000 bytes per second - faster than Novell's PSERVER and most other devices - while providing superior on-the-spot job control. The bottom line: FPServer eliminates the network printing bottleneck and gives users control over their print jobs. =========================================================================== ASSUMPTIONS ABOUT THE READER =========================================================================== The material in this file has been written with the assumption that the reader has a solid understanding of the IBM Personal Computer architecture, DOS usage, and Novell NetWare operation. In particular, it is assumed that you already have an operational NetWare network with established print queues running through some form of existing print server. Many of the operations associated with setting up and maintaining printing services on a NetWare network require Supervisor-level authority. If you are not your Network's Administrator, you may need to involve him/her in the process of installing FPServer the first time. (Subsequent changes to FPServer's operation may be implemented without Supervisor assistance.) Please consult the documentation for these other products if you have questions regarding them. =========================================================================== NECESSARY EVILS =========================================================================== My apologies for the following sections, but they are unfortunately necessary in today's world. Please read them and then move on to the more interesting material which follows. COPYRIGHT --------------------------------------- All of FPServer's files and materials are copyrighted. The UNALTERED, UNMODIFIED self-extracting file is hereby placed in the public domain; it may be copied, distributed, and used without restriction as long as it is not changed or modified in any way. You are free to upload the unmodified self-extracting file, IN ITS ENTIRETY, to bulletin boards and other "common access" systems. All other rights to FPServer are specifically reserved. Registration and the purchase of one or more SoftKeys is required to obtain uninterrupted use of FPServer. The above release to the public domain does NOT include such uninterrupted use nor the availability of SoftKeys. Please read the REGISTER.DOC file for complete registration information. FPServer represents a significant investment of my time and effort. It is my sincere hope that you will benefit from your use of this program. I would appreciate you giving copies of FPServer to anyone (everyone!) you know that uses Novell NetWare. Doing so costs you exactly nothing and makes it possible for me to continue writing such software. Constructive comments may be incorporated into future upgrades, so your input is valuable. Please submit them via (in order of preference) CompuServe, fax, mail, or voice (see above for numbers and addresses). Please see "About the Author" at the end of this file for more information on my consulting services. OEM and custom versions of FPServer are also available. Thank you for your support! DISCLAIMER --------------------------------------- FPServer, and all of its associated files and programs, is provided without warranty of any kind. The user of this software is solely responsible for: A) determining its suitability for any purpose, B) the accuracy of its operation, and C) the results obtained by its use. As written, FPServer does not contain any "viruses" or other malicious routines. However, such routines do exist and can be "attached" to otherwise benign and beneficial programs, often without obvious indication. FPServer does not attempt to detect the presence of such additions. It is solely the user's responsibility to determine the "purity" of this software and its associated files. =========================================================================== DESIGN PHILOSOPHY AND FEATURE LIST =========================================================================== As stated above, FPServer has two design goals: Ultra-high data throughput and ease of use. All Engineering projects involve some compromises (to which we refer as "design decisions" or "tradeoffs"). For FPServer, every such compromise was resolved primarily in favor of speed and secondarily in favor of ease of use. Based on this philosophy, FPServer includes many features not available in other print server environments - and does NOT include some which are less important. So that you may obtain better insight into the philosophy of FPServer, the following feature list describes some of these differences (and my reasons for them). CONSOLE I/O --------------------------------------- The FPServer console (screen and keyboard) system includes a detailed display for each port and queue being serviced. This is in sharp contrast to the consoles offered by other programs (which often include little to no useful data) or "black boxes" and their printer-interface lookalikes (which offer no console at all!). FPServer's main display includes: * The name of the print queue being serviced by each port * Each port's hardware status lines, including OFFLINE, PAPEROUT, ERROR, and DTR OFF * The owner, print job title, and print job size of the job currently being printed * The number of bytes which have been transmitted for the job currently being printed * The owner, print job title, and average throughput for the most recently completed print job You may "zoom" on any of FPServer's ports to obtain a closer look at that particular print queue. The zoomed view includes all of the information described above, and adds a display of pending print jobs in the queue. Once in the zoomed view, you may select the current or a pending job (if any) and perform various job-related operations right from FPServer's console. That's right - you are able to control your printing while still standing next to the printer, instead of running back and forth between the print server and your PC. DELETE PRINT JOBS - GRACEFULLY ---------------------------------------- If you've ever experienced a runaway print job, you know how inconvenient such a situation can be. The print job data is spread out all over - some still in the print queue on the file server, some in the print server, and some in the printer. To delete the job and stop wasting paper, you have to stop the printer, stop the print server, rush back to your PC, run Novell's PCONSOLE, delete the job from the print queue, restart the print server, and restart the printer. What's worse, other print jobs being serviced by the print server are interrupted when you shut it down to clear its memory (this can make you VERY unpopular!). FPServer eliminates the "runaway runaround" by allowing you to delete print jobs right from the print server console. When "zoomed" on a single port, you may delete any print job (including the current one) by highlighting it and selecting Delete from a menu. ALL traces of the job are deleted: The printer (if parallel) is reset, FPServer's buffer is emptied, and the job is deleted from the print queue. A message reminding you to reset the printer manually (if necessary) is displayed on-screen and the port is held idle for a programmable period of time so you may reset the printer or manually flush its input buffer. RESTART PRINT JOBS - CONVENIENTLY ---------------------------------------- FPServer's ability to delete print jobs is nice when you want to completely discard a runaway print job. But what if you still need a copy of it? You probably sent it because you needed it - and the fact that something went wrong doesn't mean you don't need it anymore. For this reason, FPServer also allows you to RESTART print jobs. When you select this option, FPServer holds the port idle for a programmable length of time - long enough for you to reset the printer, reposition the paper, or whatever - and then restarts the job from the very first byte. A special message is displayed during the reset pause as a reminder to reset the printer. PRIORITIZE PRINT JOBS - IMMEDIATELY ---------------------------------------- For those occasions when there's a large number of jobs ahead of yours - but YOU'RE the only person willing to stand by the printer and wait - FPServer allows you to prioritize your job to the top of the queue. The current print job will be finished as usual (FPServer will not interrupt a job in progress) but the NEXT job to be serviced will be the newly prioritized one. SIMPLE CONFIGURATION --------------------------------------- FPServer's operational characteristics are controlled by two methods: commands in an ASCII configuration file (FPSERVER.CFG) and commands included on the DOS command line when FPServer is started. All FPServer commands are "human readable", allowing you to easily review the print server's configuration. Other file servers obtain their data from encoded files which can be manipulated only through ADDITIONAL programs. The need to run separate software to change - or even just review - the print server's configuration makes setup and maintenance a lengthy, frustrating process. FPServer first processes the contents of its FPSERVER.CFG file (if present), then interprets command line parameters (if any). Later commands take precedence over earlier versions of the same command so you may temporarily modify FPServer's behavior via the DOS command line without editing any files or running any other programs. You do not even need to be logged in to the network; just override (or supplement) the FPSERVER.CFG file right on the command line and press Enter. CLEAN EXIT TO DOS --------------------------------------- FPServer allows its execution to be terminated via an exit menu, just as any other well-behaved program. Doing so immediately returns the machine to DOS - cleanly, with no "resident" code modules or "captive" memory. Other print server programs offer no clean exit to DOS, and sometimes even require the machine to be rebooted - an inconvenient and sometimes lengthy process. The ability to cleanly exit to DOS is particularly helpful when used in conjunction with FPServer's command line parameters (see above). You may experiment with various configurations by just exiting back to DOS, pressing F3 (get last command line), editing the command line parameters, and pressing Enter to restart FPServer. INTELLIGENT REAL TIME OPTIMIZATION --------------------------------------- FPServer's primary design goal is high bandwidth. Unfortunately, the best way to achieve high performance is dependent on many different parameters. Some, like machine type, clock speed, and average network latency, do not vary greatly and could be entered by the user. However, other parameters such as typical job size and the speed at which print devices accept data can vary dramatically from day to day and print job to print job. To make matters worse, those parameters which have the greatest effect on throughput are also those which are the most difficult to predict - and that have the widest spectrum of possible behavior. To address this, FPServer incorporates a two layer real-time optimization algorithm based on actual network and print device performance. Port throughput (the speed at which each print device is accepting data) and network throughput/latency (the speed at which the network can supply data) are used to control the amount of processor resource dedicated to each task. FPServer constantly monitors these conditions and adjusts its own operating parameters to assure that the maximum possible data rate is maintained on all ports. NUMBER OF PORTS --------------------------------------- FPServer will support up to seven ports on a single machine - three parallel and four serial. These ports do not require interrupt lines (IRQ's) and may be based at any address in the host machine's I/O space. The mixture of three parallel and four serial allows a print server host to be constructed using commonly available and inexpensive "combo I/O" cards. Further increasing the number of supported ports would have forced many other design decisions to be adversely compromised. Ultimately, I decided that if FPServer could be made to run fast enough, it would be more effective to use another old PC with standard (and inexpensive) parallel and serial hardware as a second Print Server. MULTIPLE FILE SERVERS ---------------------------------------- More installations are moving to multi-server environments as networks become more common. In support of this, FPServer now services up to seven separate file servers simultaneously. Each port may be service jobs from a separate print queue on a separate file server - you do not need to consolidate all of your print jobs on a single file server. You can also have multiple ports service a common print queue to reduce print job dwell time. If you have duplicate printers, you can multiply the bandwidth of print job servicing by specifying the same print queue for multiple ports. PROGRAMMABLE PORT ADDRESSES ---------------------------------------- FPServer allows you to explicitly specify the I/O addresses for each active port. In addition to providing support for hardware which uses non-standard I/O, this allows you to logically rename ports regardless of their physical addresses. Programming port addresses is an option, not a requirement. If you do not specify an address for a port, FPServer will automatically derive the address from the BIOS data area in low memory. Regardless of where the address originated (your command or BIOS), FPServer always confirms the presence of physical hardware before enabling it for use. This prevents "artificial" ports which are generated by some programs from causing print server or network problems. PORT INTERRUPT LINES NOT REQUIRED --------------------------------------- FPServer does not require interrupt-driven parallel or serial ports, and ignores such interrupts if they are generated. FPServer's architecture runs without interrupts for three reasons: 1) Many host PC's do not have seven interrupt lines available for such ports; 2) Most I/O cards do not support seven individual interrupt choices; and 3) FPServer's output routines are so tightly optimized for speed that the latency associated with servicing interrupts would actually REDUCE throughput! DIRECT SUPPORT FOR FIFO'D PRINTERS ---------------------------------------- A recent development in high-speed (and especially laser) printers is the use of a small FIFO as the front end of the parallel port. These buffers generally accept 8-32 bytes at extremely high data rates, store them internally, then interrupt the printer's microprocessor only when the FIFO is full. This dramatically improves the efficiency of the printer's CPU. To get maximum performance from these new printers, FPServer analyzes the data-reception behavior of parallel printers and optimizes its output algorithm for FIFO-based operation if detected. ROBUST VIDEO SYSTEM ---------------------------------------- This release incorporates a vastly improved video system that has proven compatible with ALL video interfaces available for testing (even those non-standard AT&T 6300's!). The new system automatically detects the type of interface and modifies its behavior accordingly. All standard video systems are supported: MDA, MGA, CGA, EGA, VGA, and SVGA, on any type of monitor compatible with the video interface. Active refreshing is also incorporated to maintain image accuracy. Even if no data has changed, the screen is completely rewritten on a periodic basis in case shell errors or other anomolies cause display corruption. FULL COLOR SCREEN DISPLAY ---------------------------------------- The new video system includes FULL COLOR support for machines equipped with color interfaces and monitors. Colors are used to highlight information and warning messages; blinking is used to highlight errors and time-sensitive conditions. Of course, monochrome-equipped systems are detected and accommodated as well. Brightness and blinking are used in place of the color system's color attributes. PROGRAMMABLE PRINTER RESET DELAY ---------------------------------------- When you delete or restart a print job, it may take you a few seconds to reset the printer, reposition the paper, and otherwise prepare to continue servicing print jobs. Since every printer is different, FPServer allows the duration of the "job delete" and "job restart" delays to be programmed individually for each port. Any value from 1-999 seconds may be specified, and during the delay the affected port will display a special message reminding you of the reason for the pause in job servicing. PROGRAMMABLE QUERY DELAY ---------------------------------------- FPServer queries file server(s) periodically for new print jobs which require servicing. While the amount of network cable traffic generated by such queries is small, a separate query is generated for each active port. Such constant scanning of print queues can generate a tremendous amount of network traffic - more than is justified for the few seconds saved at the start of a print job. Therefore, when a print queue query finds no print jobs to service, FPServer delays before checking that print queue again. FPServer allows you to increase this delay, if you wish, from its default of one-half second to any value in the range 1-999 seconds. A separate value for each port allows you to tune the delays based upon the type of printer and its frequency of use. More active printers may benefit from shorter delays (more frequent querying), while less-active printers may do just fine with only an occasional query. Note that setting a port's query delay only affects the potential delay until a print job is started. Once a job has been initiated, it runs at full speed regardless of the query delay setting. PROGRAMMABLE POST-JOB DELAY ---------------------------------------- Here's another network printing suggestion straight from the people who know best: You, the actual users. More and more printers are providing multi-language support (PCL, PostScript, etc.) by "analyzing" the first few bytes of print data to determine which emulation is being used. Once the decision is made, the printer switches to that emulation and completes the print job. When the printer is connected to a single PC with a single user, the pause at the end of each print job helps the printer decide when it must resume analyzing the data and choosing an emulation. But in a shared (networked) environment, multiple print jobs can be sent to the printer back-to-back - making it impossible for the printer to distinguish between jobs even though they may be in different emulations. To provide better support for these "auto-switching" printers, FPServer allows you to specify a post-job delay of 1-999 seconds. This delay is inserted by FPServer immediately after each print job's last byte of data is sent to the printer. A separate delay value is maintained for each port so that you may add the delay to those printers which require it without imposing it on those which do not. By default, this delay is zero; but it is easy to add if your printer requires it. AUTO-REBOOT ON MISSING SHELL ---------------------------------------- Network resources should operate autonomously, even when problems arise. File servers are a shared resource upon which many people depend. For this reason, they are often equipped with uninterruptable power supplies (UPS's) so, if the power fails, they can shut down and then restart gracefully without operator involvement. Print servers are also a shared resource, and they too should operate autonomously when problems arise. When power is lost and then restored, PC-based print servers with AUTOEXEC.BAT files will automatically reboot into DOS, often faster than the file server itself reboots. Since the PC is now "ahead of" the file server in its boot sequence, the PC's network shell will fail to find a file server and the print server software will fail to start. A manual reboot of the print server - AFTER the file server is running - is then required. FPServer solves this problem by confirming the presence of the network shell - and a valid connection to a file server - before initializing. If no connection exists, or if the shell is not loaded, FPServer will display a message, wait 30 seconds, and automatically reboot the PC. For debugging convenience, you may abort the reboot process and return directly to DOS during the 30 second pause by simply pressing any key. FPServer will continue the "scan, delay, reboot" cycle until it finds an active file server, no matter how long the file server takes to reboot itself. In this manner FPServer becomes a completely autonomous resource; if power is momentarily interrupted during the night, chances are your users will never know about it. PROGRAMMABLE AUTO-REBOOT ON LOST NETWORK ---------------------------------------- Another problem which has traditionally plagued print servers is the "lost network". This can be caused by anything from a file server going down to a temporary break in the network cable. The result is the same: the shell loses contact with the file server, sometimes resulting in the message "Network Error: Abort, retry" appearing on the screen. Such situations are confusing to users and have always required human intervention - until now. FPServer now detects "lost network" and other lockup conditions. Whether the shell reports it or not - with or without a "Network Error" message - FPServer will automatically cold-boot the PC after a programmable delay as long as the basic operation of the PC is not impaired. This feature, in combination with Auto-Reboot on Missing Shell above, makes FPServer immune to almost all forms of network lockup and reboot failures. Simply stated, FPServer does not passively hope that everything goes well; it aggressively works to make SURE print services are available to all network users 24 hours a day. LOW MEMORY REQUIREMENTS ---------------------------------------- FPServer incorporates a memory management system which takes advantage of traditional DOS memory. However, even with all ports active, no more than 400K free DOS memory (as reported by the DOS utilities CHKDSK or MEM) is ever required. This small memory requirement means that DOS, the network interface drivers, and the network shell itself can still be loaded into traditional DOS ("low") memory - exactly as they should be for maximum performance. NOTIFY FOR JOB COMPLETE AND DELETE --------------------------------------- FPServer supports the optional Notify parameter which sends a broadcast message to the job owner when a print job has been successfully completed. Unlike other print server software, however, FPServer sends this message to the originating WORKSTATION (rather than the specific username) in case the user has logged in under a different name since the job was submitted. FPServer further enhances the Notify concept by notifying users of job deletion. If the current print job is deleted from the queue before being successfully completed, FPServer will send a broadcast message to the originating workstation to notify it of the premature deletion. BANNERS --------------------------------------- FPServer supports optional "banner pages" which are printed at the start of a job. Three fields are printed on four lines of enlarged (over one inch high) text: The name of the job owner, the description of the print job, and the date/time when the job started printing. Unlike the banners provided by most other print server software, however, FPServer's banners ALWAYS present accurate information. The job's owner and description are derived from data embedded in the job itself, rather than from data supplied by the user's CAPTURE or NPRINT statements. Date/time information is obtained directly from the file server (network time) instead of the print server's host PC (whose local clock may not be accurately set). In addition, the banner displays the date and time in a alphanumeric "DD Mon YY" format to avoid confusion over whether the day or month should be printed first in a purely numeric representation (different countries have varying standards). FORMFEEDS --------------------------------------- FPServer supports the optional FormFeed parameter which helps assure that new print jobs start at the top of a new page. And FPServer's FormFeed option (when enabled) generates a new page at the end of EVERY COPY within the job so that each starts on its own new page. This is in contrast to other print server software which only emits a formfeed at the END of the job, thus causing multiple-copy jobs to suffer from the same problem that the FormFeed option was intended to eliminate. SOFTKEY-BASED LICENSING --------------------------------------- There is only one "version" of FPServer: The fully operational version which includes all features and capabilities. No handicapped "demo" versions exist, and no features are "hidden" until you spend money. My idea is simple: You should base your decision to pay for and use FPServer on an examination of the complete product in your own environment. This is made possible with "SoftKeys". A SoftKey is a numeric key derived from the serial number of the copy of NetWare running on a file server. FPServer obtains your NetWare serial numbers directly from the file server(s) to which it is connected, and compares them with the SoftKeys you have supplied to it in its configuration file or on its command line. If all connected file servers have correct SoftKeys, FPServer runs without interruption. However, if one or more file servers have missing or incorrect SoftKeys, FPServer terminates after twenty minutes. You can restart it as many times as you like - the program does not "destroy itself" or leave datestamps on your network drives - but every run of the program will terminate after twenty minutes. This demonstration period allows you to experience what the terms "ultra-high throughput" and "ease of use" mean IN YOUR OWN ENVIRONMENT. You can completely configure FPServer for your network - fine tune all of its parameters, let other users play with it - on your own schedule and without any pressure. As an example, in twenty minutes you can send 48 MEGABYTES to a Hewlett Packard LaserJet 4 (which accepts data at 40,000 bytes per second). So you can test even those BIG jobs that leave other print servers gasping for breath. If, after testing it in your own real-world environment, you decide that FPServer is not for you, simply stop using it. There's no up-front expense, no refund hassles, no paperwork, no phone calls, no explanations to salesmen, no restocking fees - just stop using it. But when you decide that YES, FPServer really does make a difference in your networked printing, simply register your file server serial number(s) via modem with FPServer's online registration system. The NWSerial utility (NWSERIAL.EXE), included with FPServer, makes it easy to list your NetWare serial numbers; and complete registration instructions appear when you exit FPServer's demo (whether by timeout or keystroke). Please read the REGISTER.DOC file for complete registration information. MISCELLANEOUS ISSUES --------------------------------------- FPServer does not support tab translation. This capability is seldom used with today's software and printers, and with thousands of users worldwide I have NEVER received a request for it. FPServer allows each port to service a single print queue. Some other programs allow a port to service multiple queues. Frankly, there are few sites where this capability is used; those that do are usually prioritizing time-sensitive print queues because network printing is so slow. I chose to delete this capability because of its low usage, the impact it had on overall throughput, and the fact that FPServer's higher speed eliminates the need for queue prioritization. FPServer does not support the concept of "forms". But FPServer's ease of reconfiguration makes it easy to simulate it. If you are actually swapping media in a single printer, set up separate print queues for each type of form, let users send their print jobs to the correct queue, and switch FPServer to that queue with a command-line override when you change the forms. FPServer cannot be configured with Novell's PCONSOLE.EXE. FPServer's many enhancements and options are completely unsupported by PCONSOLE, and FPServer's human-readable configuration file and command line parameters allow faster and more flexible setup and experimentation without it. FPServer's status cannot be determined using Novell's PSC.EXE for the same reasons that PCONSOLE is inadequate. Unlike Novell's PSERVER.EXE, FPServer provides complete status information directly from its console; a separate program is not required. FPServer does not support the RPRINTER protocol. By definition, RPRINTER is a slower process: data must pass through the network a second time, and then through another workstation, before reaching the target printer. FPServer's design goal was speed - and thus support for this inherently slower process was deleted. FPServer does not "advertise" its presence on the network with NetWare's Service Advertising Protocol (SAP). To be more specific, FPServer does not issue Server Identity Broadcasts nor respond to Service Advertising Queries. =========================================================================== HARDWARE REQUIREMENTS =========================================================================== HOST PC (PRINT SERVER) --------------------------------------- FPServer may be used on virtually any PC which conforms to the generally accepted standards for IBM Personal Computer compatibility. There is no minimum processor architecture or speed; an 8088-based PC running at 4.77MHz is quite adequate. A numeric coprocessor is neither required nor used, and if present will be ignored. A video subsystem (interface and monitor) is required for initial setup. During operation, FPServer will display printer status and queue contents and allow users to manipulate jobs if a display is present. Technically speaking, however, FPServer does not require a display for day-to-day operation. FPServer does not require a keyboard if you are willing to go without some of its console interaction capabilities. If you wish to use the host PC for other functions in addition to being a print server, a keyboard may be used to gracefully exit and later restart FPServer (a keyboard is probably also required for your other purposes). However, for dedicated print server applications that power-up directly into FPServer, a keyboard is strictly optional as long as the host PC will successfully boot without one. A disk drive is required to hold FPServer and its configuration file (both of which are relatively small). A floppy drive is more than adequate for this task; in fact, if DOS and other required files (AUTOEXEC.BAT, CONFIG.SYS, etc.) will fit together with FPServer on a single floppy, that disk can serve as the boot device and no hard drive is required at all. One or more ports are required for communication between FPServer and the print devices. FPServer can support up to three parallel and four serial ports at any I/O address within the IBM PC's 64K I/O address range. The interrupt lines normally associated with these ports (typically IRQ's 3, 4, 5, and 7) are completely ignored by FPServer and may instead be used for other purposes such as the network interface card. FPServer requires no more than 400K free memory even when running its full compliment of three parallel and four serial ports. FPServer does not require Extended memory (XMS) or Expanded memory (EMS) and ignores it if present. Loading DOS and other programs in "high memory" (as allowed by later versions of DOS) provides no additional functionality and is not required unless the host machine otherwise has less than 400K free memory for FPServer. Based on the above, a minimum hardware specification for an FPServer host PC would be an 8088 running at 4.77MHz with 1MB of memory, one low density floppy drive, one or more parallel and/or serial ports, no hard drive, no keyboard, and no video. A disk in the floppy drive would contain the following: Bootable DOS (disk formatted with the /S option) CONFIG.SYS file AUTOEXEC.BAT file which loads network drivers and invokes FPServer Novell's IPX.COM or the ODI environment programs Novell's NETx.COM SHELL.CFG (optional as required by Novell's software) FPSERVER.EXE FPSERVER.CFG (containing appropriate configuration data) ...all of which can comfortably fit on a 360K low density floppy. Such a host PC would cost less than $300 even if purchased NEW. PRINT DEVICES --------------------------------------- FPServer may be used with any external device that supports hardware handshaking. Device types are not limited to printers; any parallel or serial device which conforms to the requirements below may be used with FPServer. Examples of "non-printer" devices include plotters, CRT terminals, modems - any device which can make use of queued data. Parallel devices must conform to the generally accepted Centronics "standard" for parallel interfaces. This well understood protocol incorporates hardware handshaking as part of its basic definition. FPServer has two parallel modes: "Safe" and "Fast". Refer to the "Technical Details" section for more information. Serial devices must provide hardware handshaking via the DTR (Data Terminal Ready) signal. This is the most common form of hardware handshaking for serial devices and is supported by virtually every printing device available. Most PC compatibles expect DTR on pin 6 of the standard 25 pin D-connector used for RS-232C; consult your computer's documentation for more information regarding the pinouts used on its serial ports. FPServer does not support software handshaking. This includes X-On/X-Off, ETX/ACK, ACK/NAK, and other purely software-based protocols. PRINTER CABLES --------------------------------------- The cables used to connect from the host PC on which FPServer executes to the print device(s) must meet certain minimum requirements. These requirements differ for parallel and serial connections; each is detailed below. For parallel connections, the cable must carry the following signals between FPServer's host PC and the printer (pin numbers refer to those traditionally used at the Centronics connector): STROBE (pin 1) DATA 1-8 (pins 2-9) BUSY (pin 11) GROUND (pins 19-30) Parallel cables should also connect the following signals, although they are not strictly required for successful operation: PE (pin 12) SLCT (pin 13) INIT (pin 31) ERROR (pin 32) For serial connections, the cable must carry the following signals (typical pin numbers are not specified for serial connections due to the wide variety of connectors and pinouts used for RS-232C interfaces): Printer Host PC ======= ======= TxD --------------> RxD RxD <-------------- TxD DTR --------------> DSR GND --------------- GND The arrows are included to clarify the direction of signal travel, since both ports have signals with identical names. It is important to note that you CANNOT connect pins with the same name to each other; each must be connected to its "complementary" pin. The sole exception is Ground, which has no direction or polarity. Pay close attention to the DTR-DSR connection. The PRINTER's DTR (which is an output) must drive the HOST PC's DSR (which is an input). Connecting the opposite signals together - even though the names are the same - will prevent FPServer (and most other software) from functioning correctly. Some serial devices, notably Engineering plotters, use the Clear To Send (CTS) signal instead of the more common DTR signal. While CTS is more sensible (it accurately describes the function being performed), devices which use it are definitely in the minority. If your device uses CTS instead of DTR, you must wire the cable so that the device's CTS signal appears at the host PC's DSR input. All pin numbers should be confirmed with your equipment's own documentation. In many cases wire "swapping" is necessary to move signals to the correct pins. The DOS COPY command, unfortunately, is not a good indication of correct handshake wiring; it is often so slow that there is no possibility of filling the serial device's input buffer. A cable which works fine with the DOS COPY command may fail with FPServer simply because FPServer can supply data so much faster than DOS. If the first part of your print job prints successfully, and then things seem to go wrong, it's quite likely that no hardware handshaking signals are being passed back to FPServer from the printer. In this case, everything goes well until the serial device's buffer overflows - and then data loss takes over. FASTER CLOCKS AND WIDER BUSES --------------------------------------- FPServer's throughput performance is much less dependent upon the host PC than other print server software. Most of its theoretical maximum throughput can be achieved on machines with (relatively) low processing power. While an increase in speed will be realized by using a faster host PC, the advantage is that older, less expensive, less "user-desirable" PC's can be used as print servers with little or no performance penalty. There are several reasons why a machine which is "twice as fast" does not yield a doubling of throughput. First, PC parallel and serial ports are eight bit devices; all I/O involving these ports occurs eight bits at a time regardless of the processor's bus width. An AT's 16 or 32 bit bus is still forced to interact with the port hardware eight bits at a time. Second, most AT-style BIOS's insert wait states for eight bit I/O operations - and thus offset the advantage of increased clock speeds. Most I/O cards are designed for operation in an 8MHz (or at most 12MHz) bus; a 25, 33, or 40 megahertz processor simply idles while its wait states time out during each input and output operation. Because the code between port operations will be executed faster, some increase in maximum throughput will be obtained with faster machines. However, the relationship is not linear; a doubling of bus width or clock speed will not yield twice the data rate. For example, FPServer running on an 80386DX-40 PC can sustain parallel data rates of 100,000 bytes per second. An original IBM PC (8088 @ 4.77MHz) has only 1/50th the processing power of the 386 machine, and yet can still run FPServer at 10,000 parallel bytes per second. In other words, a machine with only 2% of the processing power can still sustain 10% of the data rate. Furthermore - and this is the most important consideration - print devices are almost ALWAYS the limiting factor. Very few can accommodate FPServer's maximum output rate even when the host machine is just that 8088-based PC. Even Hewlett Packard's LaserJet 4, with its new 80960-based controller, is limited to approximately 40,000 bytes per second. FPServer running on an 80386DX-40 has 2.5 TIMES that bandwidth. Only the fastest output devices will find themselves waiting between bytes received from FPServer. Before spending money on a faster PC host, be sure to run FPServer on a low end machine and compare its test mode performance with the rates obtained when driving a "real" printer. Your oldest, slowest PC may be more than fast enough for the printers in question. =========================================================================== CONFIGURATION COMMANDS =========================================================================== FPServer's operation is controlled by commands which appear in a configuration file and on the DOS command line. All commands, regardless of their location, use a common format. For consistency, all commands which affect a specific port begin with the port's name (LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4). Those which affect the overall operation of the software do not incorporate port names. FPServer recognizes the following commands: portQUEUE ...specifies print queue to be serviced portMODE ...specifies parallel port timing mode portBAUDRATE ...specifies serial port baud rate portPARITY ...specifies serial port parity portDATABITS ...specifies number of serial data bits portSTOPBITS ...specifies number of serial stop bits portBASE ...specifies parallel/serial I/O base address portQUERYDELAY ...specifies delay between print queue queries portPOSTJOBDELAY ...specifies delay after print job completion portRESETDELAY ...specifies delay for manual printer reset BOOTDELAY ...specifies delay before auto-reboot REMARK ...allows remarks in FPSERVER.CFG file REM ...same as REMARK Commands are processed in the order that they appear. Those in the file FPSERVER.CFG are processed first, followed by any which appear on the command line. Later commands take precedence over earlier, making it possible for command line parameters to temporarily override the contents of FPSERVER.CFG (this is extremely useful for experimentation and early setup). No warning is issued if multiple, redundant commands are detected; the later commands (if valid) are processed and the earlier commands simply overridden. Spaces may surround equal signs ONLY in the file FPSERVER.CFG. Including spaces around equal signs on the command line will confuse DOS's command line parser and result in error messages. Since spaces are never REQUIRED for any command, it is recommended that commands not include spaces at any time. Examples in this file omit spaces in the recommended fashion. All commands and their parameters are converted to capital letters prior to interpretation and are thus case-insensitive. portQUEUE COMMAND --------------------------------------- The portQUEUE command defines the print queue to be serviced by a hardware port. Its format is as follows: portQUEUE=fileserver/printserver/printqueue,softkey ...where: port = LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4 fileserver = the name of the file server printserver = the name of a print server on that file server queuename = the name of a print queue on that file server softkey = the SoftKey for the specified file server All three names - the file server, the print server, and the print queue - MUST be included in every portQUEUE command in the exact format shown above (separated by forward slashes and no extra spaces). There are no default values; if any of the names are missing, invalid, or incomplete, the associated port is disabled. During startup, FPServer logs in to the specified file server as the specified print server and attaches to the specified print queue. The print server object must not require a password, and it must be authorized to service the specified print queue. If not, an error will be reported on the port's screen display and the port will be disabled. Network Supervisors can create print server objects and remove print server passwords using Novell's PCONSOLE utility; refer to Novell's documentation for more information regarding the creation of print server objects. The print server object should also have Operator rights to the specified print queue, or several FPServer features will not be available. Network Supervisors can grant print queue Operator rights to print server objects using the QRights utility (QRIGHTS.EXE) included with FPServer; refer to the separate documentation file QRIGHTS.DOC for more information. If a SoftKey is available for the specified file server, it must follow the print queue's name with a separating comma (again, no extra spaces are allowed). A file server's SoftKey must be included in EVERY portQUEUE command which references that file server; even a single portQUEUE command without a valid SoftKey will cause FPServer to terminate after the demo period. The following example illustrates the correct use of the portQUEUE command. If you wish FPServer to log in to the file server named FILE1, as the print server object named PRINT6, and use LPT2 to service the print queue named QUEUE3, you would use the following command: LPT2QUEUE=FILE1/PRINT6/QUEUE3 Because no SoftKey is supplied, this command would allow FPServer to print jobs which appear in QUEUE3 only until the demo period expired. If you then register FILE1's serial number for use with FPServer and receive the SoftKey 0123-4567:89AB-CDEF (for example), you would add it to the above command as follows: LPT2QUEUE=FILE1/PRINT6/QUEUE3,0123-4567:89AB-CDEF VERY IMPORTANT: You must select a single print server object for each file server and use that print server object in every portQUEUE command which references that file server. Due to a limitation in Novell's NetWare, you cannot be logged in to one file server as multiple print servers simultaneously. Failure to heed this limitation will result in inoperative ports. There is no default for the portQUEUE command. A port must have a valid portQUEUE command to prevent that port from being disabled. In addition, even a single portQUEUE command without a valid SoftKey will cause FPServer to terminate after the demo period. portMODE COMMAND --------------------------------------- The portMODE command defines the parallel port strobe timing mode. Its format is as follows: portMODE=method ...where: port = LPT1, LPT2, or LPT3 (not COM1, COM2, COM3, nor COM4) method = either SAFE or FAST FPServer supports two operational modes for the parallel ports: "Safe" and "Fast". Values other than SAFE or FAST are ignored. The difference between them involves the timing of the Strobe signal and the way that Centronics-equipped print devices are designed. This subject is discussed more thoroughly in the "Technical Details" section. Generally, you should always specify FAST unless doing so results in printer errors or garbled data. No print devices tested to date have been incompatible with the FAST setting, and using it significantly increases FPServer's maximum throughput. However, should the printer report an "I/O Error" or start dropping characters, change that port's mode to SAFE and compare the results. The default for the portMODE command is FAST. portBAUDRATE COMMAND --------------------------------------- The portBAUDRATE command defines the baud rate for a serial port. Its format is as follows: portBAUDRATE=value ...where: port = COM1, COM2, COM3, or COM4 (not LPT1, LPT2, nor LPT3) value = 110, 300, 600, 1200, 2400, 4800, 9600, 19200, or 38400 FPServer supports the nine baud rates shown above. The full baud rate value - three, four, or five digits - must be supplied including trailing zeroes (i.e. "96" is invalid). Values other than those shown above are ignored. There is no default for the portBAUDRATE command. UART baud rates are not initialized unless this command is specified. portDATABITS COMMAND --------------------------------------- The portDATABITS command defines the number of data bits for a serial port. Its format is as follows: portDATABITS=value ...where: port = COM1, COM2, COM3, or COM4 (not LPT1, LPT2, nor LPT3) value = 7 or 8 FPServer supports either 7 or 8 data bits. Values other than 7 or 8 are ignored. There is no default for the portDATABITS command. UART data bits are not initialized unless this command is specified. portPARITY COMMAND --------------------------------------- The portPARITY command defines the parity for a serial port. Its format is as follows: portPARITY=value ...where: port = COM1, COM2, COM3, or COM4 (not LPT1, LPT2, nor LPT3) value = ODD, EVEN, or NONE FPServer supports the standard ODD and EVEN parity options in addition to no parity at all. Values other than ODD, EVEN, or NONE are ignored. If ODD or EVEN parity is specified, FPServer will program the UART to calculate and insert an additional bit into each serial word. Specifying NONE will disable parity and reduce the length of each serial word by one bit. There is no default for the portPARITY command. UART parity is not initialized unless this command is specified. portSTOPBITS COMMAND --------------------------------------- The portSTOPBITS command defines the number of stop bits for a serial port. Its format is as follows: portSTOPBITS=value ...where: port = COM1, COM2, COM3, or COM4 (not LPT1, LPT2, nor LPT3) value = 1 or 2 FPServer supports either 1 or 2 stop bits per serial word. Values other than 1 or 2 are ignored. Please note that the UART associated with the specified port may impose limitations on the number of stop bits allowed in certain modes. There is no default for the portSTOPBITS command. UART stop bits are not initialized unless this command is specified. portBASE COMMAND --------------------------------------- The portBASE command defines the base of the I/O hardware address range for a parallel or serial port. Its format is as follows: portBASE=value ...where: port = LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4 value = a hexadecimal value of up to four digits The value may be any legal hexadecimal value from one to four digits in length in upper or lower case, with the exception of zero. No "punctuation", such as a leading "0x" or trailing "H", is required or allowed. Invalid values are ignored. Most IBM PC-compatible hosts contain BIOS code which scans for parallel and serial ports at industry-standard addresses and stores them for program use. FPServer normally uses these BIOS defaults for port I/O addresses, and under most circumstances there is no reason to override them. In reality, though, FPServer does not care what specific address is associated with a given port name. LPT1, COM3, etc. are just convenient shorthand for "the first parallel port, the third serial port," and so on. Given no commands to the contrary, FPServer will match port names to their industry-standard addresses just like any other software; but the portBASE command allows you to force address values if you wish. One use for the portBASE command is to support multi-port I/O cards which pack a large number of parallel and/or serial channels into a single board. Such interfaces commonly use non-standard I/O addresses which standard PC BIOS's do not detect. The portBASE command makes it possible to use such interfaces with FPServer. Another use for the portBASE command is to "move" port names. For example, if your host PC contains two parallel ports, they will most likely be addressed at 3F8 hex (LPT1) and 2F8 hex (LPT2). However, you can "swap" the two ports - and thus the printers they drive - by specifying opposite addresses as follows: LPT1BASE=2F8 LPT2BASE=3F8 FPServer does not blindly accept hexadecimal values. A detailed analysis is performed at the specified address to confirm the presence of industry-standard parallel or serial hardware. If such hardware is not present at the specified address, the portBASE command is ignored. The default values for port base addresses vary from machine to machine, and FPServer defaults to the addresses detected by BIOS for maximum compatibility. For reference, the addresses most commonly used for parallel and serial ports are as follows (all values are in hexadecimal): Port Mono System Color System ---- ----------- ------------ LPT1 3BC 378 LPT2 378 278 LPT3 278 not available COM1 3F8 3F8 COM2 2F8 2F8 COM3 3E8 3E8 COM4 2E8 2E8 COM3 and COM4 are often not supported by BIOS code. You may find that COM3BASE and COM4BASE commands are required by your host PC even though they reside at the "industry standard" addresses of 3E8 and 2E8. The difference in parallel port addresses between monochrome and color systems is due to the common practice of including a parallel port on monochrome video interfaces. Such mono-printer interfaces typically use a special address, 3BC hex, which is normally ignored by separate parallel interfaces. If a parallel port is present at 3BC hex, most BIOS's will treat it as LPT1 and move all other parallel ports "up" one position to compensate. (Serial ports are not affected by video type.) portQUERYDELAY COMMAND ---------------------------------------- The portQUERYDELAY command defines the amount of time, in seconds, a given port will wait between print queue queries. Its format is as follows: portQUERYDELAY=ddd ...where: port = LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4 ddd = delay in seconds Values from 1-999 are accepted; the entry is truncated to the first three digits. Invalid values, including zero, are ignored. Larger values will reduce network overhead but increase the delay from the submission and the actual start of a print job. Smaller values will cause print jobs to start faster at a slight increase in network traffic. The default queue query delay is one-half second; however, the minimum value which may be specified with the portQUEUEQUERY command is one second. For the absolute minimum delay, simply do not specify a portQUEUEQUERY command. portPOSTJOBDELAY COMMAND ---------------------------------------- The portPOSTJOBDELAY command defines the amount of time, in seconds, FPServer will delay after the completion of a print job before beginning a new one. Its format is as follows: portPOSTJOBDELAY=ddd ...where: port = LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4 ddd = delay in seconds Values from 1-999 are accepted; the entry is truncated to the first three digits. Invalid values, including zero, are ignored. The specified delay is ADDED to the query delay defined by the portQUERYDELAY command for the specified port (if any). The default value for the portPOSTJOBDELAY command is zero (no additional delay after job completion). portRESETDELAY COMMAND --------------------------------------- The portRESETDELAY command defines the amount of time, in seconds, FPServer will delay after a job is manually restarted or prematurely deleted. Its format is as follows: RESETDELAY=ddd ...where: port = LPT1, LPT2, LPT3, COM1, COM2, COM3, or COM4 ddd = delay in seconds Values from 1-999 are accepted; the entry is truncated to the first three digits. Invalid values, including zero, are ignored. The RESETDELAY command allows you to tailor the amount of time required for you to help your printer recover from a restarted or prematurely deleted print job. Since different printers may require different amounts of time, FPServer allows you to specify separate values for each port. If a job has been restarted from FPServer's console, the next data to be sent will be the restarted job. If the current job has been prematurely deleted, the next data will be the next job in the print queue. If no jobs are pending, no additional data will be sent. The default value for the portRESETDELAY command is 10 seconds. BOOTDELAY COMMAND --------------------------------------- The BOOTDELAY command defines the amount of time, in seconds, FPServer will allow for a "lost file server" before rebooting the host PC. Its format is as follows: BOOTDELAY=ddd ...where: ddd = delay in seconds Values from 1-999 are accepted; the entry is truncated to the first three digits. Invalid values, including zero, are ignored. The default value for the BOOTDELAY command is 30 seconds. This is generally a good compromise between too small a value (which can cause frequent resets in networks with heavy traffic) and too large a value (which can needlessly delay restoration of printing services after power outages, etc.). You may, however, need to optimize this value for your particular environment. REMARK AND REM COMMANDS --------------------------------------- Remarks may be included in the FPSERVER.CFG file in the format: REMARK This is a comment ...or: REM This is a comment The space after the REMARK or REM command MUST be included. REM and REMARK lines are simply ignored by FPServer. A MINIMAL FPSERVER.CFG FILE --------------------------------------- (Note: The SoftKeys in the following examples are not valid. They are included only for illustrative purposes.) As noted in their individual descriptions, many of FPServer's configuration commands default to standard values. The number of commands actually required for proper operation is therefore quite small. In fact, a completely operational print server can be established with a single command: a portQUEUE command which specifies a print queue and the port which is to service it. An FPSERVER.CFG file containing the command: LPT1QUEUE=FILE1/PRINT6/QUEUE3,0123-4567:89AB-CDEF ...will yield a print server which attaches to the File Server FILE1, logs in as the print server PRINT6, obtains jobs from the print queue QUEUE3, and outputs them on the first parallel port using FAST mode. All other parallel and serial ports, if present, are disabled by default. For a truly minimal configuration, the FPSERVER.CFG file can be eliminated completely by including required commands on the command line itself. Entering the following command at a DOS prompt: FPSERVER LPT1QUEUE=FILE1/PRINT6/QUEUE3,0123-4567:89AB-CDEF ...will satisfy FPServer's minimal parameter needs and yield exactly the same operation as if the FPSERVER.CFG file mentioned above were present. Note that no spaces are present around the equal sign, in keeping with DOS's command line parser requirements. A TYPICAL FPSERVER.CFG FILE --------------------------------------- The following is an example of a more typical FPSERVER.CFG file for a hypothetical network which uses many of the commands described above: Rem **************************************************************** Rem !!! PLEASE CONTACT JOHN DOE IN MIS BEFORE CHANGING THIS FILE !!! Rem **************************************************************** Rem - Print Server in Admin area is PS-ADMIN on file server ADMIN Rem - Admin. LaserJet IIID's queue is named PQ-LASERJET3D LPT1Queue=ADMIN/PS-ADMIN/PQ-LASERJET3D,0000-1111:2222-3333 Rem - LaserJet IIID works fine with Fast parallel ports LPT1Mode=FAST Rem ---------------------------------------------------------------- Rem - Admin. PaintJet's queue is named PQ-PAINTJET Rem - Print Server is identical; can only use one on each file server Rem - SoftKey is identical, because it's the same file server LPT2Queue=ADMIN/PS-ADMIN/PQ-PAINTJET,0000-1111:2222-3333 Rem - PaintJet likes Fast parallel too LPT2Mode=FAST Rem ---------------------------------------------------------------- Rem - Drafting's HP7580 plotter queue is PQ-HP7580, and... Rem - ...Drafting has its own file server named DRAFTING, and... Rem - ...they named their print server PS-DRAFT, and... Rem - ...SoftKey is different, because it's a different file server COM1Queue=DRAFTING/PS-DRAFT/PQ-HP7580,1111-2222:3333-4444 Rem - Plotter is set up for 19200 baud, 8 data, no parity, 1 stop COM1BaudRate=19200 COM1DataBits=8 COM1Parity=None COM1StopBit=1 Rem - It takes more than 10 seconds to put new paper in the plotter COM1ResetDelay=60 Rem ---------------------------------------------------------------- Notice that uppercase and lowercase are mixed freely in this example. As mentioned above, FPServer capitalizes all alphabetic characters prior to processing them. Feel free to make the file "human readable". =========================================================================== INSTALLATION =========================================================================== INSTALLING FPSERVER.EXE --------------------------------------- There is no complicated installation procedure for FPServer. The program file itself, FPSERVER.EXE, may be placed in any subdirectory. However, since most host PC's will be dedicated to the task of print servers, it is recommended that FPSERVER.EXE be placed in the root directory of the boot device (probably either A: or C:) to reduce the size and complexity of the AUTOEXEC.BAT file. CREATING THE FPSERVER.CFG FILE --------------------------------------- The FPSERVER.CFG file, if used, may be created with any editing program that can produce a "pure" ASCII file on disk. Pure ASCII, in this context, indicates that the file must not contain word processing commands or other non-human readable information (essentially, it should include only numbers, letters, and standard punctuation characters). DOS's EDLIN and EDIT programs and all text editors work in this manner; most word processing programs also have a "text output" or "ASCII output" option that prevents the inclusion of special formatting characters. FPSERVER.CFG must reside in the default subdirectory in effect when FPServer is invoked. This does not mean that they must reside in the SAME subdirectory, although that is definitely the most desirable (and least error-prone) configuration. What it DOES mean is that if, before typing FPServer at the command line, you type "DIR ", FPSERVER.CFG must be one of the files shown in the current subdirectory. Obviously, the best situation is to have both FPSERVER.EXE and FPSERVER.CFG in the same subdirectory, and make that subdirectory the current one, when starting FPServer. The easiest way to insure this is to place both files in the root directory of the boot device and be in that root directory. TEMPORARY MODIFICATIONS --------------------------------------- One of the most convenient features of FPServer's configuration system is the ability to temporarily override the contents of the FPSERVER.CFG file with entries on the command line. The fact that you need not be logged in to the File Server between "sessions" of FPServer streamlines this even further. As an example, to change the queue being serviced by a printer-resident interface, Novell's PSERVER, or a "black box" print server, you would have to perform the following steps (assuming that the print server in question already has sufficient rights to service the new queue): * Reboot the print server (since Novell's PSERVER.EXE does not provide a "clean" exit to DOS) * Log in using an account with sufficient rights to modify the parameters of the print server in question * Run Novell's PCONSOLE.EXE * Work your way down through the menu system until you reach the level at which the "Queues to be Serviced" can be edited * Delete the old queue and enter the new one, specifying the correct parallel or serial port as you do so * Back out of the menu system until you reach DOS again * Restart the print server Through all of this, you will have to reboot the print server at least once and run two separate programs - just to try something a little different. If you do not like the results, you get to go through the entire routine again just to put things back the way they were. In contrast, FPServer can be reconfigured the same way with the following steps: * Exit to DOS by pressing Escape, then Y on the print server's host PC * Press F3 to recover the "FPServer" command line that last started the software * Add the appropriate "portQUEUE=" command to the end of the command line (which will override any similar command in FPSERVER.CFG) * Press Enter! This amounts to 14 keystrokes plus the queue specification. There is no need to reboot the host PC, or log in as someone else, to change FPServer's operation - just a few keystrokes and a few seconds completely reconfigures its behavior. To restore things back to the way they were, simply exit again, type FPServer on the command line, and press Enter. Eleven keystrokes and everything reverts back to the configuration you originally specified in FPSERVER.CFG. Neither Novell's PSERVER.EXE nor any "black box" can touch FPServer for ease of use! PERMANENT MODIFICATIONS --------------------------------------- To make configuration changes permanent, simply modify the FPSERVER.CFG file using your ASCII text editor. Again, this may be done by simply Escaping out of FPServer, running the editor, and restarting FPServer. It is not necessary to reboot the host PC nor even log in to the File Server. =========================================================================== NORMAL OPERATION =========================================================================== STARTING THE PRINT SERVER --------------------------------------- FPServer may be started by typing its name at any DOS prompt and pressing Enter. However, in most installations, the PC will be dedicated to the print server application. In such environments, FPServer may be included as the last command in the PC's AUTOEXEC.BAT file to completely automate its startup. Configuration commands may optionally follow FPServer's name up to the limit that DOS imposes on the length of the command line. See the "Controlling PSERVER's Operation" section earlier in this file for more information regarding configuration commands and their parameters. Regardless of the startup method chosen, the FPSERVER.CFG file must reside in the default directory when FPServer is invoked. See "Creating the FPSERVER.CFG File", above, for more information. Console Response Time --------------------------------------- A note about console response time: During especially high speed print jobs, FPServer's console operations may slow somewhat. This occurs when FPServer has detected the opportunity to establish a high-bandwidth path to one or more printers and is redirecting processor resources accordingly. Since FPServer ALWAYS favors throughput over everything else (ease of use is secondary, remember), response to the keyboard and screen may slow when a high speed job is being serviced. If FPServer seems to be ignoring your keystrokes, don't worry - they are being stored in an internal buffer until the print job has an idle moment. THE MAIN SCREEN --------------------------------------- The main print server screen is separated into eight regions: a title block at the top which contains text information, and seven port displays - one for each of the seven hardware ports supported by FPServer. All port displays are identical in their content. The following description is applicable to all. The Status Line --------------------------------------- The top, or status, line of each port display contains the traditional name for the associated hardware port (LPTx or COMx). This is followed by the name of the print queue to which this hardware port is logically attached (as specified by the portQUEUE command in either the FPSERVER.CFG file or the command line). The print queue's name is truncated, if necessary, to fit on the status line. The right side of the status line displays port information. The first parameter reports throughput limitations: Printer Limited (Parallel only.) FPServer is capable of transferring data more quickly, but the printer's BUSY line is not allowing it to do so. The printer asserts BUSY when it is unable to accept another byte of data. This occurs after each byte is transmitted and during intensive printer processing. FPServer must wait for BUSY to go inactive again before transmitting the next byte. This is the most common limiting factor for parallel printers. Baud Limited (Serial only.) FPServer is capable of transferring data more quickly than the selected baud rate will allow. Increasing the baud rate may improve printing speed somewhat. Each port's status line also displays printer information to the extent that it is available from the printer itself (more data is available from parallel devices than from serial devices): OFFLINE (Parallel only.) The printer is off line. PAPEROUT (Parallel only.) The printer is out of paper. ERROR (Parallel only.) The printer is in an error condition, other than Off Line and Paper Out, for which no further information is available. This may be caused by an access cover being open, low toner or ink, erroneous data, or loss of power. Many printers indicate such errors on their front panels. Consult the printer's documentation. DTR Off (Serial only.) The printer is momentarily not accepting data. This generally occurs when the baud rate is faster than the printer's effective throughput rate. With data coming in faster than it can be printed, the input buffer fills until eventually the printer can accept no more data. The printer then "turns off" the DTR line to prevent further transmission until it has emptied the buffer to some extent. For parallel devices, the BUSY line is the only parameter which controls the transfer of data. OFFLINE, PAPEROUT, and ERROR are reported by FPServer but do not affect data flow. Many printers - especially those with large input buffers - are capable of accepting data while offline and/or out of paper, and FPServer supports them without limitation. Serial devices use DTR as their sole means of flow control, and thus FPServer must cease sending data when DTR goes "off". The "Former" Line --------------------------------------- The Former line appears immediately beneath the status line. It displays the owner, description and average speed (in bytes per second) of the most recently completed print job. The average speed is calculated by dividing the job's size by its duration in integer seconds. A job's duration is considered to start when the first byte of data is received from the print queue and end when the last byte of data is transferred to the printer. ANY event which lengthens this amount of time - and thus adversely affects the overall amount of time consumed by the job - will correctly result in a decrease of the average speed. This includes running out of paper, going off line, and other "normal" occurrances. The "Current" Line --------------------------------------- The Current line appears beneath the status line. It displays the owner, description, size, and progress of the job currently being printed. The progress display appears on the right side of the Current line and indicates the number of bytes which have been sent to the printer. The value is updated as the device accepts more data from FPServer. Interruptions in data flow will cause this value to stop increasing (since the device is not accepting data). A job remains on the Current line until the last byte of data is accepted by the printer. When the last byte has been successfully transferred, FPServer notifies the file server that the job has been completed (so it can be removed from the print queue) and passes the completion information to the Former line (described above). THE PORT SCREEN ("ZOOMED" VIEW) --------------------------------------- When the main screen is displayed, a highlight appears on the left and right sides of the image. This highlight can be moved up and down using the cursor keys, thus allowing you to select one of the seven ports. A note on the highlight: The choice of "arrows" was made for maximum compatibility with the widest variety of video monitors. It is common for old, phosphor-burned (and usually monochrome) monitors to be used on print servers. Such units often have difficulty displaying colors, fine contrasts, and sometimes even differences in brightness. A moving-character highlight was therefore used to insure compatibility with almost ANY monitor. If you can even barely distinguish individual characters on the screen, you can use that monitor with FPServer! Once an individual port has been selected, pressing Enter will "zoom" on that port. The area previously devoted to displaying all seven ports will be used to display information on just the selected port. The zoomed view includes the selected port's Status, Former, and Current lines. The remaining lines form a queue display showing pending jobs ready to be printed. Multiple pending jobs are shown in the order they will be printed, with the topmost job being first. Each pending job displays its owner and its description. Jobs appear in the Pending area only when they are complete and ready for service. This differs from other print server programs, which often display jobs still being uploaded to the file server. The problem with including such incomplete jobs is that a prioritized list, such as the one in the Pending area, can be rendered inaccurate at any moment by a smaller job which started later but finished queuing first. Such a job can "jump ahead" of the incomplete jobs - seeming to "pop" into the Current line without ever having been in the queue. FPServer prevents this problem by only displaying those jobs which are complete and ready to go: the order in which they are displayed is the order they will be printed. The one exception to this rule is delayed or "deferred" print jobs. NetWare allows the printing of jobs to be delayed until some future date and time. FPServer honors this feature, but includes such jobs in the Pending display for two reasons: 1) So you know they are there, and 2) So you can Prioritize them if you wish (described below). If print jobs appear which seem "stuck" in the queue, the most likely explanation is that they have a future print date/time specification. (Novell's PCONSOLE can be used to confirm this.) THE PORT MENU --------------------------------------- The zoomed port view incorporates a highlight much like the one on the main screen. In this case, however, the highlight is used to select the Current print job or one of the Pending print jobs. Once the Current or a Pending job is selected, pressing Enter will display a menu of job-related options. From here, you may choose to Delete, Restart, or Prioritize the highlighted job. The following sections describe the options available from the port menu. Please note that the QRights utility, which accompanies FPServer, must be used to grant print queue Operator rights to FPServer before any of these features can be used. Deleting Print Jobs --------------------------------------- You may delete either the Current or any Pending print job. This is a very powerful capability which saves you from running back and forth between the printer and a workstation running Novell's PCONSOLE. Deleting a Pending print job simply removes it from the print queue. There is no effect on the Current print job (if any). Deleting the Current job immediately stops data transmission to the printer, flushes the job from FPServer's local buffers, deletes the job from the print queue, and issues a hardware reset to the printer (if parallel). There is no industry-standardized method for issuing a hardware reset to serial printers. Worse yet, not even all parallel printers obey the parallel port's INIT line. The most glaring exception is Hewlett Packard's LaserJet printers: not a single model in their entire line supports the INIT signal, even though its function was recognized and supported YEARS before the first LaserJet shipped. Extensive discussions with HP's Boise, Idaho facility (where the LaserJet product line originates) has never yielded a reason for this omission. The effect on HP's customers: it is impossible for FPServer, or any other software, to asynchronously reset a LaserJet with a hardware signal - even when the data stream is "lost" and a software reset command would be ignored. Most other parallel printers will react to FPServer's hardware reset and flush their buffers automatically; but YOU have to manually reset a LaserJet. When you delete a print job from within FPServer, a broadcast message is sent to the originating workstation if the job's owner enabled the Notify option. Restarting Print Jobs --------------------------------------- Restart is another port menu option. It is available only when the Current job is highlighted (not when a Pending job is selected). Restart behaves much like the Delete option described above - data transmission is halted, FPServer's buffers are flushed, the printer is reset - but instead of the job being removed from the print queue, it is restarted from the beginning after the port's reset delay times out. Restart is handy for obtaining a "good" copy of a runaway print job. If you believe the data in the print job is accurate and the problem stems from a one-time data phasing error, Restart allows you to reset the printer, "clean up" everything, and try again without having to completely regenerate the print job. (If the problem persists, you can always decide to Delete it anyway.) Prioritizing Print Jobs --------------------------------------- Prioritize allows you to move the highlighted print job to the "top" of the Pending job list. If you send a print job to a busy print queue, you may find it nested deep in the Pending list, and it may take minutes or even hours for the printer to reach your job. On the premise that the person standing at the print server must be in a greater hurry than one who is not, selecting Prioritize will advance the highlighted job ahead of all others in the print queue. The Current job (if any) will not be interrupted, and the relative order of the other Pending jobs will not be altered - but the highlighted job will move directly to the top of the print queue and be the next job serviced by FPServer. Prioritize works on all print jobs, including those which have been specifically "deferred" to a date or time in the future. This can be used in interesting ways: For example, you can submit print jobs with a target print date far in the future (thus causing them to sit in the queue indefinitely), then "print on demand" by walking up to FPServer's console and Prioritizing the desired job(s). If you are REALLY in a hurry, you can force FPServer to start a specific Pending job immediately. First, Prioritize the desired job; then, Delete the Current job. This is a bit extreme, however - and may cause future printing difficulties as co-workers take revenge on YOUR print jobs! STOPPING THE PRINT SERVER --------------------------------------- Execution of FPServer may be stopped by pressing Escape (as noted in the title at the top of its screen) and answering Y to the confirmation query. FPServer stops servicing active jobs, frees allocated memory, and cleanly returns control to DOS. Jobs which were being printed when Escape was pressed are reset, at the File Server, and will be serviced when FPServer is restarted (or another authorized print server notices them). Exceptions to this can occur if requested by the software which originated the job, but NetWare's standard methods for queuing print data (CAPTURE and NPRINT) both allow prematurely terminated servicing to restart without data loss. If FPServer was running in demo mode (because of bad or missing SoftKeys), it will display the unlicensed ports, file servers, and serial numbers when exiting. However, if multiple, conflicting portQUEUE commands (different print server names for the same file server) have been supplied for a single port, the file server name and serial number may not appear if FPServer cannot resolve the correct file server/print server relationship. =========================================================================== ERROR MESSAGES =========================================================================== FPServer uses two classes of error messages: "DOS-level", which are issued outside of its console environment (i.e. at the DOS command line level), and "operational", which appear on the console screen. This section lists FPServer's error messages, the reasons that can cause them to be displayed, and recommended actions. DOS-LEVEL ERROR MESSAGES -------------------------------------------- These messages generally involve network shell problems and SoftKey issues which will cause FPServer to prevent or terminate its execution. They generally prevent or terminate program execution and are displayed at the DOS command line level. Workstation is not attached to a network System will auto-reboot in 30 seconds -------------------------------------------- REASON: Upon receiving control from DOS, FPServer confirms that the host workstation is "attached" to a File Server. ("Attached", as defined by NetWare, means that the physical and logical connections exist which allow the workstation to log in to the File Server.) The host workstation does NOT have to be logged in - but the logical attachment to at least one file server, as normally established when Novell's NETX loads, must be present. This message is displayed if such an attachment cannot be found. ACTION: Confirm that the workstation successfully connects to a file server when Novell's NETX shell loads (it will issue a message stating the name of the file server to which it attached). Again, it is not necessary to be logged in. Insufficient memory --------------------------------------- REASON: There is insufficient free conventional ("low" or "DOS") memory for FPServer to initialize and support the specified ports. 128K, PLUS a minimum of 16K for each active port, must be available when FPServer is started. This message is displayed if enough memory is not available. ACTION: Just before the host PC starts FPServer, run DOS's CHKDSK or MEM program to determine the amount of free conventional memory. (FPServer does not use extended or expanded memory, and ignores it if present.) If the amount is less than required: 1) confirm the PC has the standard one megabyte of base memory, 2) reduce memory consumption by other programs, or 3) reduce the number of active ports on this particular print server. not provided with a SoftKey --------------------------------------- REASON: FPServer was running in demo mode, and has terminated, because one or more portQUEUE commands is missing a valid SoftKey for the specified file server. ACTION: Register your NetWare serial numbers and obtain SoftKeys for each file server to be serviced by an FPServer. Once the SoftKeys have been purchased, confirm that the correct SoftKey is included on EVERY SINGLE portQUEUE command in the FPSERVER.CFG file and on the command line. Even one portQUEUE command with a missing SoftKey will cause FPServer to terminate after its demo period. Please read the file REGISTER.DOC for complete registration information. 's SoftKey is Invalid --------------------------------------- REASON: FPServer was running in demo mode, and has terminated, because one or more portQUEUE commands contained an invalid SoftKey for the specified file server. This differs from the error message above, which indicates that the SoftKey was completely missing. ACTION: Confirm that the correctly typed SoftKey is included on EVERY SINGLE portQUEUE command in the FPSERVER.CFG file and on the command line. Even one portQUEUE command with an invalid SoftKey will cause FPServer to terminate after its demo period. Please read the file REGISTER.DOC for complete registration information. 's NetWare Serial Number is... --------------------------------------- REASON: FPServer was running in demo mode, and has terminated, because one or more portQUEUE commands did not include a valid SoftKey for the specified file server. Since you will need your file server's serial number during registration, this message is displaying that number for your convenience. (You may also obtain file server serial numbers with the NWSerial utility.) ACTION: Register your NetWare serial numbers and obtain SoftKeys for each file server to be serviced by an FPServer. Once the SoftKeys have been purchased, confirm that the correct SoftKey is included on EVERY SINGLE portQUEUE command in the FPSERVER.CFG file and on the command line. Even one portQUEUE command with a missing SoftKey will cause FPServer to terminate after its demo period. Please read the file REGISTER.DOC for complete registration information. OPERATIONAL ERROR MESSAGES -------------------------------------------- These messages include those problems which do not cause FPServer to terminate its execution. They generally affect only a single port, and appear on the "Current" line of the affected port's display. Not in use --------------------------------------- REASON: The port is not in use. It is not connected to a print queue and cannot service print jobs. ACTION: This is the normal message for inactive ports. If you expected the port to be active, this indicates some type of configuration error occurred which could not be diagnosed more completely. The most likely problem is a invalid or missing portQUEUE command containing this port's name. Bad or missing port hardware --------------------------------------- REASON: No valid port hardware could be found at the address specified by this port's portBASE command. If no portBASE command was provided, this command indicates that the default I/O base for this port (as supplied by BIOS) did not address acceptable hardware. ACTION: Confirm portBASE address values are valid (pure hexadecimal values without leading "0x" or trailing "H"), and confirm that the associated physical port hardware is actually installed in the host machine. Also confirm that the port hardware is compatible with the industry-standard IBM PC parallel and serial ports. Invalid FServer/PServer/PQueue Spec --------------------------------------- REASON: The value associated with the portQUEUE command for this port contained bad syntax or too few parameters. ACTION: Confirm that all three names are specified in the portQUEUE command. A file server, AND a print server, AND a print queue must be explicitly included. Confirm that forward slashes are used to separate each of the three names, and that no spaces appear anywhere within the portQUEUE command. Error attaching to server --------------------------------------- REASON: FPServer could not successfully attach to the file server specified by the associated portQUEUE command. ACTION: Confirm that the specified file server is accessible via the cable attached to the host PC. Confirm that the specified file server is actually running and accepting new attachments/logins (Network Administrators sometimes disable new connections during maintenance). Error logging in as --------------------------------------- REASON: FPServer is unable to log in to the specified file server using the print server object name specified in the portQUEUE command. ACTION: Confirm that the print server object's name is spelled correctly. Confirm that the print server object actually exists on the specified file server. Confirm that the print server object does not require a password. not authorized to service... --------------------------------------- REASON: FPServer was able to attach to the specified file server, and log in as the specified print server, but that print server is not authorized to service print jobs in the specified print queue. ACTION: Confirm the print queue name is spelled correctly. Run Novell's PCONSOLE or QRights to grant service rights to the specified Print Server object for the specified queue. Run Novell's PCONSOLE and confirm that the print queue is enabled and that new print servers may attach to it. Error attaching to queue ----------------------------------------------- REASON: The file server will not allow FPServer to attach to the specified print queue. ACTION: Confirm that the print queue name is correctly spelled. Confirm that the print queue exists on the File Server to which the host PC is attached. Run Novell's PCONSOLE and add the specified Print Server object to the list of print servers allowed to service the specified print queue. Confirm that fewer than 25 print servers (NetWare's limit) are already attached to the print queue. Run Novell's PCONSOLE and confirm that the specified print queue's operating parameters are acceptable. Refer to Novell's documentation for further information. RESET printer to flush job ----------------------------------------------- REASON: The Current print job has been Restarted or Deleted, but some data from the cancelled job may still remain in the printer's buffer. FPServer is reminding you to take action, as necessary, to flush the printer's data buffer. ACTION: Do what is necessary (which may be nothing at all) to assure the printer's buffer is flushed of all prior data. This message will disappear after the number of seconds defined by the portRESETDELAY command has expired (default = 10). ...query delay... ----------------------------------------------- REASON: FPServer is delaying the number of seconds specified by the portQUERYDELAY command before requesting another job from the print queue. This is not an error. ACTION: None; just wait for the query delay to time out. If the query delay is too long, you may modify it with the portQUERYDELAY command. =========================================================================== FINE TUNING FOR MAXIMUM PERFORMANCE =========================================================================== FPServer is seldom the limiting factor in a network printing system. Many other components and subsystems conspire to limit the ultimate printing bandwidth. This section discusses some of the more common limiting factors and offers improvement suggestions. Some, none, or all of these may be applicable to your situation; consult your equipment's documentation and manufacturer(s) for more specific information. PRINTER DATA RATES --------------------------------------- The most common limiting factor is the print device itself. Different printers accept data at different rates. In fact, the same printer will often accept data at varying rates depending upon the data's formatting, content, and other factors. If the device has an input buffer, its initial data rate can be very high while the buffer is being filled. This is because the printer simply stores the data (rather than processing and printing it) and writing data into memory is a relatively fast operation. Ultimately, however, the buffer will be filled and the data rate must then drop to the speed at which the device can generate an image on the output media - since that is the rate at which new buffer space becomes available. The type and content of the data is also significant. For example: A fully rasterized image, sent to a laser printer, places very little burden on the printer's microprocessor and is basically transferred directly into the page buffer. The limiting factor in this case is often the engine speed; the printer can move the paper only so fast regardless of how quickly data can be accepted from the host and placed into memory. The fastest data rates are generally achieved with single pages of fully rasterized (graphics) laser printer data. In these cases, the last byte of data is transferred before the engine begins operation and thus the mechanism speed is factored out. "BPS" values drop when the print job exceeds a single page. The first page will still transfer into the empty page buffer very rapidly, but subsequent bytes must wait for room to appear in the page buffer as its current contents (the first page) are transferred to paper. In addition, the printer's microprocessor will devote less time to data reception since it will also be running the engine (a workload which was not present during the transfer of the first page's data). High level printer "languages", such as Hewlett Packard's PCL 5 and especially Adobe's PostScript, can yield even lower data transfer rates. Unlike pure graphics - where one bit generally equals one pixel - very small amounts of high level printer languages can create an ENTIRE PAGE of rasterized data. The conversion is handled by the printer's microprocessor, which may accept a small amount of data and then "go deaf" while those few bytes generate an entire page. The dramatically reduced "BPS" values that result from this condition do not mean that your printing throughput is poor, but that each byte of data is generating a lot of rasterized output. Pure text can produce the lowest "BPS" values, again due to mechanism speed. As an example: Assume a laser print job contains ten pages of 25 characters each. The data for the first page will transfer - and the rasterized image will be created - almost instantly. However, the second (and subsequent) pages will be limited by the printer's need to physically print the previous page. Since a laser's engine speed is a constant, each page takes the same amount of time to pass through the mechanism - and thus fewer characters per page yields lower "BPS" values even though throughput (as measured in PAGES) is constant. In any case, FPServer is almost certainly capable of supplying data faster than your print device is able to accept it. The appearance of the "Printer Limited" message on the port's Status Line indicates that the printer is refusing data when FPServer offers it. You may confirm this - and determine FPServer's maximum data rate in your environment - by using FPServer's "Test" mode (described below). FPSERVER'S TEST MODE --------------------------------------- FPServer's parallel port routines have a special mode which can be used to determine the maximum throughput possible in the tested environment. This mode may be invoked by using the portMODE command as follows: LPT1MODE=TEST ...or: LPT2MODE=TEST Selecting "Test" mode causes FPServer's parallel port routine to act as if an infinitely fast print device were connected to the designated port. All of the same routines are used - and the print job data is actually transmitted - but printer-induced delays are ignored. This is a complete bandwidth test which involves the disk drives on the File Server, the network cabling and interfaces, the clock rate of the print server's processor, the speed of the print server's parallel port hardware - EVERYTHING associated with transferring a print job from the File Server to the connector on the back of the print server. The resulting bytes per second (BPS) values indicate the absolute maximum throughput of which FPServer is capable in the test environment. Some notes regarding "Test" mode: * Files of sufficient size must be used for "Test" mode results to be significant. The most accurate values will be obtained with jobs at least 500KB in size. * Multiple jobs should be run through "Test" mode so that the File Server's job startup overhead can be factored into the results. Multiple, back-to-back jobs should be queued up and ready to go prior to starting FPServer in "Test" mode. * Most printers will report errors if connected during "Test" mode. This is because FPServer does not honor their BUSY line and thus transmits the data faster than the printer can accommodate it. It is recommended that printers be disconnected during "Test" mode to prevent erratic operation. * Printer status signals, such as OFFLINE, PAPEROUT, and ERROR are still reported in "Test" mode even though they have no effect on FPServer's operation. They may be safely ignored. * Test mode may be temporarily invoked by including the portMODE=TEST command on the DOS command line. Normal FPServer operation will resume the next time it is started without the additional command. * Test mode may be used only with parallel ports. Few serial devices support "dynamic" baud rates or per-byte hardware handshaking, and thus FPServer cannot obtain useful information from such a test. PRINTER SPEED SETTINGS --------------------------------------- One way to improve printer throughput is to optimize the printer's configuration. Many printers have setup options which can increase (or, when incorrectly set, decrease) data throughput. For example, the Hewlett Packard LaserJet IIISi's parallel port has an optional HIGH SPEED mode which can be configured from the printer's front panel. Setting HIGH SPEED=NO causes the IIISi to use a BUSY signal with a minimum duration of 10 microseconds. Setting HIGH SPEED=YES reduces the minimum BUSY duration to 1.5 microseconds - a significant reduction which has a dramatic impact on data throughput. Be sure to review your print device's documentation for speed-enhancing configuration options. You may wish to contact the manufacturer for specific recommendations or suggestions. BRIDGES --------------------------------------- Bridges, used to connect multiple networks, can impose limitations on overall throughput. To understand why, it is useful to review the "data path" for queued print data. When a workstation requests that a job be printed, the data is directed into a print queue. The print queue resides on a file server - one of the file servers to which FPServer attaches during initialization. During job servicing, the data is retrieved from the file server's hard drive, sent through the network interface card, over the cable, into FPServer's network interface card, and out to the print device. At a minimum, therefore, queued print data must pass through two software programs (the file server's operating system and FPServer) and two network interface cards (one each on the file server and FPServer's host PC). Internal bridges - i.e. multiple interface cards installed in the File Server's backplane - are already in a "minimum" configuration. The fact that the data was received on one network interface card and is transmitted on another is unimportant, since it is buffered to hard disk in the meantime. As a result, internal bridges do not restrict bandwidth. In contrast, external bridges can impose significant bandwidth limitations. The presence of an external bridge in the data path inserts at least one more software program (the bridge operating system) and two more network interface cards (one in and one out of the bridge). In many installations this is probably compounded by the fact that bridges are often slower 80286 systems with inherently poorer throughput. Self-contained bridges often have higher throughput than PC's used as bridges. However, to maximize throughput, it is strongly recommended that FPServer's host PC be connected to a network cable which runs directly to the file servers containing the serviced print queues. DEDICATED NETWORK CABLES --------------------------------------- Contrary to popular belief, it is NOT necessary to connect a PC-hosted print server to a file server via a dedicated network cable. Under most circumstances (with most printers), the print server can share its cable with other workstations and will not place an undue burden on the total cable bandwidth. MULTIPLE PORTS PER PRINT SERVER --------------------------------------- Many times the first approach to increasing print server throughput is to reduce its number of active ports. This is often very effective on other print server software - but is COMPLETELY UNNECESSARY with FPServer. FPServer incorporates a "dynamic linking/unlinking" algorithm which reduces the overhead on inactive ports to ZERO. Whenever the queue associated with a given hardware port is empty, FPServer unlinks the associated software routines from its service chain as if the port had never been activated. Only when a job is ready for service does FPServer relink the associated hardware's service routines and begin devoting resources to it. Careful design has also lessened the impact of multiple simultaneous jobs. Reductions of under 10% are typical - rather than the 50% loss often experienced with other print server software. As stated earlier, FPServer generally has far more bandwidth capability than the print devices which it drives, and that bandwidth is automatically optimized across currently active devices in real time. FPServer's high throughput also reduces the likelyhood, and duration, of coincident jobs. Jobs are completed faster and are thus less likely to incur even FPServer's small multi-job throughput degradation. The bottom line is: There is little to no penalty when connecting multiple devices to FPServer simultaneously. What may have required multiple dedicated print servers in the past can now be handled with a single PC. 16 BIT NETWORK INTERFACES AND DRIVERS --------------------------------------- The print server's network interface card can have more effect on overall throughput than any other physical component. Recommendations can be summarized into the following: Use a 16 bit network interface card with a 16 bit optimized driver. 16 bit network interface cards have been shown to have significantly higher effective bandwidth than their 8 bit counterparts. While parallel and serial port hardware is, by definition, 8 bits in width, the interface to and from the network interface card's buffer memory has no such architectural restriction and should thus be as wide as possible. 16 bit network interface cards should have drivers optimized for use in a 16 bit environment. It is possible to write a driver which is compatible with both 8 bit and 16 bit hosts and interfaces. Such "universal" drivers do not take adequate advantage of the host PC's 16 (or 32) bit processor. Call the network interface card manufacturer, if necessary, and confirm that the driver is specifically intended for use on 16 bit (read: 80286 and up) microprocessors. It is not my intention to give preferential treatment to any single vendor, but I will report that 3Com's EtherLink III "Parallel Tasking" network interface card has produced some of the most dramatic throughput values I have measured to date. This performance, combined with an extraordinarily low cost (under $130 street price), makes it an excellent choice for high bandwidth applications such as FPServer. EMM386.EXE AND DOS'S LOADHIGH --------------------------------------- DOS 5.0, and many third-party utilities, allow drivers and portions of the operating system to be loaded above the traditional 640K DOS memory area (into a region commonly known as "high memory"). This is traditionally done in an effort to release memory in the lower 640K for use by applications software. FPServer requires, at most, 400K of free memory. Amounts greater than that are unused while FPServer is in operation and therefore wasted. If, just prior to running FPServer, CHKDSK reports 400K or more free, loading programs "high" will yield absolutely no advantages. Loading programs "high" CAN yield disadvantages, however. A special device driver is typically required to handle the redirection to software loaded in "high" - and this driver can severely impact overall PC performance. Measurements on DOS 5.0's EMM386.EXE show a 50% DECREASE in I/O bandwidth - presumably because EMM386.EXE was intercepting I/O operations in case they were intended for a program loaded "high". (This test was run without ANY programs actually loaded high; just EMM386.EXE's presence in memory cut I/O throughput in half.) Use of Novell's XMSNETx.EXE and EMSNETx.EXE programs can impact throughput because they too make use of memory outside the standard 640K. While very useful in memory-bound environments, these programs are a detriment to FPServer's bandwidth; furthermore, they are unnecessary since FPServer's 400K is seldom too great a demand on the host machine's resources. In summary, FPServer will operate perfectly with DOS, network drivers, etc. loaded "high". However, the low memory thus freed will very likely go unused - and overall print server throughput will suffer needlessly. It is strongly recommended that the host PC load all software in the standard 640K DOS memory area for maximum performance. BUS CLOCK SPEEDS --------------------------------------- ******************************************************************************* * CAUTION!!! * * * * The following section discusses altering the fundamental operating * * characteristics of the host PC. Only individuals VERY EXPERIENCED * * with PC's and their internal operation should modify these parameters. * * Incorrect settings can render your PC inoperative. If you are not * * COMPLETELY familiar with the architecture of your PC, please obtain * * the assistance of a qualified PC Technician. * * * * Not all BIOS's allow these parameters to be modified. Please consult * * your computer's documentation or manufacturer for more information and * * specific recommendations. * ******************************************************************************* Most AT-class PC's of recent vintage are fabricated using high integration chipsets, where four or five "mega-chips" are equivalent to hundreds of small- and medium-scale integration IC's. The BIOS included with PC's of this type generally have a secondary setup screen where operational parameters may be manipulated to fine tune the machine's performance. One of these parameters, the Bus Clock, affects the speed with which operations may be performed on the backplane - where the parallel, serial, and network interfaces reside. (For technical accuracy, it should be pointed out that there is no actual "clock" signal, as such, on the backplane. Instead, this signal serves as the fundamental for the various timing and control signals which actually run the asynchronous AT bus.) The Bus Clock is usually derived from the processor clock via division by a value selected in the BIOS setup screens. Manipulating this divisor inversely affects the Bus Clock (increasing the divisor decreases the speed of the Bus Clock, and vice versa). Typical Bus Clock divisor values which may be selected include 2, 3, and 4 which, on a 25MHz machine, would yield "bus speeds" of 12.5MHz, 8.33MHz, and 6.25MHz respectively. The early IBM AT used an "8MHz" bus clock, thus defining the lowest speed at which cards intended to be compatible must operate. Since virtually all cards compatible with the AT backplane can therefore be expected to run with an 8MHz Bus Clock, BIOS's for faster (33MHz and 40MHz) processors usually include higher numbers to allow the bus speed to reach the 8MHz range. Since, as stated above, all AT cards are designed to accommodate 8MHz, FPServer's host should always run its bus at 8MHz or above. FPServer's throughput MAY be improved by decreasing the divisor value, and thus increasing the Bus Clock, to operate the backplane cards at a faster speed. Reduce the divisor ONE INCREMENT AT A TIME and carefully observe the effects. You should reboot the machine multiple times to confirm reliable operation at the new bus speed. Regarding the Bus Clock's "upper limit": there seems to be an industry threshold at 12MHz. While cards do exist which have been designed to operate beyond that speed, they are definitely the minority. For safety, consider 12MHz as the top end of the bus speed range. Be sure to record the original values of all parameters before altering them. It may become necessary to restore them in the future as other cards are added to the system. I/O WAIT STATES --------------------------------------- ******************************************************************************* * CAUTION!!! * * * * The following section discusses altering the fundamental operating * * characteristics of the host PC. Only individuals VERY EXPERIENCED * * with PC's and their internal operation should modify these parameters. * * Incorrect settings can render your PC inoperative. If you are not * * COMPLETELY familiar with the architecture of your PC, please obtain * * the assistance of a qualified PC Technician. * * * * Not all BIOS's allow these parameters to be modified. Please consult * * your computer's documentation or manufacturer for more information and * * specific recommendations. * ******************************************************************************* I/O Wait States are another set of parameters which, like the Bus Clock described above, affect the speed with which operations may be performed on the backplane. Many AT-compatible cards cannot accommodate the I/O speeds of which current microprocessors are capable. The limiting factor is often the IC's used on the cards; many logic families, fast enough for 4.77MHz 8088's, simply cannot sustain the command and data rates of later generation microprocessors. Recognizing this, the high-integration chipsets used in so many AT-class machines allow the insertion of "wait states" into input and output operations. Simply stated, a wait state causes the processor to idle for a known length of time - thus giving the external device a chance to react to the processor's instruction. The slower the device, the greater the number of wait states. Wait states impose a heavy penalty on performance - not surprising since the microprocessor is essentially being told to "hurry up and wait". Early 80286-class PC's, often advertised as 12MHz (or even 16MHz) machines, had wait states on MAIN MEMORY and thus ran little faster than zero-wait-state 8MHz or 10MHz PC's. The accepted norm is now to place all memory on the motherboard and run it at full speed without wait states (or to include a cache which offsets some of the impact of slow memory). The same is not true, however, of ports, video boards, and other peripherals. Even when mounted directly on the motherboard, the processor communicates with these components via I/O instructions - rather than memory reads and writes - and thus any I/O Wait States will directly impact their communications bandwidth. As with the Bus Clock, acceptable values for I/O Wait States will vary between different PC's, processor clock speeds, and combinations of external cards. Empirical analysis (read: trial and error) is the best method, since the goal is to obtain the fastest reliable operation for the machine in question. Many BIOS's allow independent numbers of wait states to be specified for 8 bit I/O operations (parallel and serial ports) and 16 bit I/O operations (most network interfaces), and different values may be required for optimal performance. FPServer's throughput MAY be improved by reducing the number of I/O Wait States. Reduce the number of wait states ONE INCREMENT AT A TIME and carefully observe the results. You should reboot the machine multiple times to confirm reliable operation with the new values. Be sure to record the original values of all parameters before altering them. It may become necessary to restore them in the future as other cards are added to the system. =========================================================================== ERRORS AND TROUBLESHOOTING =========================================================================== This section discusses some common problems and possible solutions. PARALLEL PORT RUNS WITH PRINTER TURNED OFF ----------------------------------------------- FPServer's parallel ports use the BUSY line to control data flow. A printer holds its BUSY line inactive when it is ready to receive another byte of data. Depending upon the design of the printer's parallel port circuitry, the printer may allow the BUSY line to "float" to its inactive state when turned off. Since FPServer never sees the BUSY line go active, it assumes the printer is ready to accept data and faithfully transmits it. If you are experiencing this, you may confirm that the printer is floating BUSY to its inactive state by turning off the printer, starting FPServer, letting it begin transmitting a job to the printer, and then disconnecting the cable from the back of the printer. Most likely, FPServer will stop transmitting immediately. (Hewlett Packard LaserJet 4's behave in exactly this manner.) DISPLAYED JOB SIZE CHANGES DURING PRINTING ----------------------------------------------- FPServer displays the size of the Current job while it is being serviced. Initially, the size of the job is the number of bytes in the print queue. However, the ACTUAL number of bytes can increase if either the banner or formfeed options are enabled. FPServer works hard to display accurate data. If a banner is generated for the job, the number of bytes associated with it are added to the job size display. If multiple copies are selected and the formfeed option is enabled, the job size display will increment at the end of every copy. This is normal, correct behavior and does not represent an error. MESSAGE "Network Error: Abort, retry" APPEARS ----------------------------------------------- FPServer's auto-reboot feature tracks the state of the host PC and will perform a reset if it appears that the shell has lost connection with the file server(s). The length of time that FPServer will wait before auto-rebooting is programmable with the BOOTDELAY command. If the value you specify with the BOOTDELAY command is too long, though, it may exceed the timeout delay of the shell itself. In this case, the shell will most likely display its infamous "Network Error: Abort, retry" message and sit there waiting for you to answer the question. The appearance of this message has no effect on FPServer's auto-reboot; once the specified number of seconds has elapsed FPServer will still reboot the host PC. If the message causes concern for you or other users, progressively reduce the value in the BOOTDELAY command until FPServer reboots the machine before the shell notices what's wrong. Please note, however, that this is strictly an OPTIONAL step and is not necessary for successful operation. FLOPPY DRIVE SEEKS AT START OF EVERY JOB ----------------------------------------------- FPServer print servers which boot from a floppy drive may seek that floppy when print jobs start. This is caused by a bug in Novell's NETX shell: When trying to open the NETQ device, the default drive is always checked for a file of that name prior to the shell intercepting the error and handling it as a network operation. This bug is completely unnecessary and entirely fixable. Unfortunately, Novell's official position on this bug is Yes, they do acknowledge it exists, but No, they are not going to fix it in NETX. Instead, they recommend that sites experiencing this problem change their shell from the NETX environment to the NetWare v4.0-style "VLM" environment (which does not exhibit the problem). I am currently developing a workaround to this problem which may appear in a future release of FPServer. In the meantime, you may safely ignore this phenomenon; it is irritating, but does no damage. PRINT JOBS START IN MID-LINE ----------------------------------------------- FPServer generally acts as a straight wire between the print queue and the printer: It passes the data exactly as found, adding and subtracting nothing. If the application which generated the print job did not include a printer reset at the beginning of the data, the printer will most likely start printing the job from the last printed position of the most recent job. Often this is right in the middle of a line. The easiest way to solve this problem is to use Novell's PRINTDEF and PRINTCON utilities to define reset commands for the printer(s). When finished, be sure to invoke the resulting printer definitions in your CAPTURE and NPRINT statements. Note that enabling the formfeed option does not change this behavior. A formfeed is a single byte which does exactly that: Feeds a single form, without changing the current printing position. No carriage return nor linefeed is issued, and most printers do not automatically reset the print position just because a formfeed was received. Banners, however, DO generate a trailing carriage return. Since the printer will have been printing the contents of the banner, its print position must be reset to some known position - and the carriage return provides this service. CAN'T LOG IN AS MULTIPLE PRINT SERVERS ----------------------------------------------- You may only use a single print server name with any one file server. Even if all seven ports are servicing print jobs from a single file server, the print server's name must be identical on EACH AND EVERY portQUEUE command. This limitation is imposed by Novell. NetWare will not allow you to log in to a file server as multiple entities simultaneously. You must select a SINGLE print server object on each file server, give it rights to service all desired print queues on that file server, and use that fileserver/printserver pair in each portQUEUE command which refers to that file server. MESSAGE "<1 BPS" APPEARS ----------------------------------------------- FPServer determines a job's data rate by dividing its total size by the number of seconds it took to transmit. If the job took an extraordinary length of time - or if the job is very small - the number of seconds may exceed the number of bytes in the job. When this happens, FPServer displays "less than one byte per second", or <1 BPS, because the job really DID average less than one byte per second. A common reason for jobs taking longer than their byte count is that the printer was left offline. By the time someone notices it, the job may have been "started" for quite a while - and enough time will have passed to generate the "less than" message. LASERJET DOESN'T AUTOMATICALLY RESET ----------------------------------------------- When you Delete or Restart a print job using FPServer's console, the parallel port's INIT line is activated to inform the printer that it should reset itself and flush any data left in its buffers. Unfortunately, Hewlett Packard has chosen to ignore the INIT line on its family of LaserJet printers. It is impossible for any software - including FPServer - to send a hardware-based asynchronous reset to a Hewlett Packard LaserJet. Hewlett Packard's suggestion is to send a PCL software reset command (ESC E) to the printer. However, this will not work if the printer is "lost" in its data stream (for example, in the middle of a graphics or font transfer). To cover all possible problem cases, the printer must provide support for a reset at any time... and the industry-standard way to do this since the 1970's has been the parallel port's INIT line. There is no workaround for this problem; you must reset your LaserJets manually. (One of the main reasons for the portRESETDELAY command was to specifically allow users enough time to manually reset LaserJets.) PRINT JOBS APPEAR "STUCK" IN THE PRINT QUEUE ----------------------------------------------- These are most likely print jobs with a target print date or time which is still in the future. Such jobs may "bubble" to the top of the print queue, yet remain unserviced while other, "later" jobs pass them by. You may confirm this by running Novell's PCONSOLE and examining the job's target date and time fields. FPServer's Pending job display generally shows only those jobs which are actually ready for printing. Print jobs which are still under construction ("Adding", as shown by Novell's PCONSOLE) or those which specifically request service by a different print server are not shown. The one exception to this rule is print jobs which meet all other requirements but have a deferred print date or time. FPServer includes these jobs so you may use its Prioritize option to immediately print them. If this were not so, you could not highlight them and thus the Prioritize option would not be available. CONSOLE RESPONSE IS SLOW DURING PRINTING ----------------------------------------------- FPServer optimizes throughput over everything else. If a print job is being serviced which the target printer is willing to accept at a high rate of speed, FPServer will allocate more resources to that port. These resources are thus unavailable for processing keystrokes and the display. Normal console response will return when the high speed job is finished. PROBLEMS WITH SERIALLY-CONNECTED PLOTTERS ----------------------------------------------- Most serial devices provide hardware handshaking (or "flow control") via the Data Terminal Ready (DTR) signal. However, some devices - especially pen, thermal, and electrostatic plotters - use the Clear To Send (CTS) signal instead. The specific name of the signal is not important - but it is CRUCIAL to connect the correct output of the print device to the DSR input of the host PC. Be sure to review the documentation for your print device if you are experiencing handshaking problems. TIMING PROBLEMS AFTER SEVEN YEARS ----------------------------------------------- FPServer's internal timebase overflows after approximately 7.5 years of continuous execution. Be sure to stop, and then restart, FPServer as you approach 7.5 years of uninterrupted operation! (smile) =========================================================================== TECHNICAL DETAILS =========================================================================== VALID PARALLEL AND SERIAL HARDWARE --------------------------------------- FPServer always confirms the presence of valid parallel and serial hardware. This is necessary because some software (including Novell's NETX shell) can attempt to "simulate" ports for which no actual hardware exists. Since FPServer interacts directly with port hardware, its absence could cause operational problems and loss of data. The verification process is based upon the circuit design used by IBM for their original Personal Computer in 1981. Later variations on this design have appeared in various platforms, but most attempt to remain downward compatible with the original. Since the original IBM design is the only one which can be considered a "standard", FPServer only requires that basic level of capability. For parallel ports, FPServer confirms the presence of an eight bit latch and an eight bit readback buffer. On the original IBM PC's parallel port, a 74LS374 octal D-style flip flop was used to store data written to the port's data address. The outputs of these eight flip flops drove the data pins on the output connector - and they also drove the inputs of a 74LS244 octal buffer. This buffer provided "read back" capability to the parallel port hardware which was tested by the BIOS during initialization. FPServer confirms the presence of a valid parallel port by writing various bit patterns to the octal flip flop and reading them back via the octal buffer. If the write and read data match, the port is assumed to be valid. For serial ports, FPServer confirms the presence of an 8250-style UART device at the specified address. 8250-style UART's contain read-write registers, some of which have bits which are forced to a known state. FPServer tests several of these registers, and if their behavior is as expected the port is assumed to be valid. INTERRUPTS --------------------------------------- FPServer uses software interrupt 1C hex, the Timer Service Routine, for various purposes. It does NOT use nor redirect hardware interrupt 8 (IRQ 0), the hardware Timer Tick, but instead lets the Timer Tick service routine call it via interrupt 1C hex. FPServer's Int 1C routine "chains" itself into the call sequence in the appropriate manner, and passes control to the original Int 1C vector upon completion. When FPServer is terminated by pressing Escape, the original Int 1C vector is properly restored. FPServer does not use any hardware port interrupts. All of the IRQ lines normally associated with parallel and serial ports (typically IRQ's 3, 4, 5, and 7) are ignored. FPServer does NOT disable them at the 8259A interrupt controller, however, so they may be used for other purposes (such as the network interface card) if necessary. Please note that, if the interrupt lines are in use by another program, an appropriate driver must be installed to service them. "SAFE" VS. "FAST" PARALLEL OPERATION --------------------------------------- There is no universally recognized timing diagram for a "Centronics" parallel port. Different manufacturer's specifications offer a variety of minimum and maximum pulse widths for Strobe, Busy, Acknowledge, and the other signals which comprise the hardware handshaking system for this industry "standard". Even different product manuals from Centronics itself do not agree on a single set of values. The vast majority of modern print devices treat Strobe as an "edge sensitive" signal, which can be briefly interpreted as meaning that the width of the pulse is less important than the fact that a pulse actually occurred. FPServer's "Fast" parallel mode takes advantage of edge sensitive devices to dramatically increase data throughput. However, print devices may exist which are "level sensitive", meaning that they expect to see Strobe stay active for a some minimum period of time. Since there is no industry standard for a Centronics port's strobe pulse width, FPServer's "Safe" parallel mode uses a value of 500 nanoseconds as stated in the original IBM Personal Computer Technical Reference manual (IBM document number 6025005), page 2-81. FPServer's "Fast" parallel mode has been tested with a wide range of parallel devices and, to date, none have proven incompatible. All parallel ports default to "Fast" mode unless a corresponding portMODE=SAFE command appears in the FPSERVER.CFG file or on the DOS command line. "Safe" mode has been included to guarantee compatibility with the maximum number of different parallel devices. However, for maximum throughput, "Fast" mode is highly recommended. =========================================================================== BUGS AND OTHER ANOMOLIES =========================================================================== There are no known bugs in FPServer. However, that does not mean that none exist! Bugs will be corrected as they are discovered (by me) or reported (by you). Please be sure to retry any failed operation before assuming it is a bug. Any number of events can corrupt data flowing over a network cable (failing network interface card, accidental disconnection of the cable, etc.). If it happens once, and you cannot repeat it, it probably isn't a FPServer bug. If you have what appears to be a legitimate bug, I WOULD LIKE TO HEAR ABOUT IT! Please be sure to document the hardware and software environment of the bugs, along with (if possible) copies of the files which were being printed at that time. =========================================================================== ABOUT THE AUTHOR =========================================================================== My name is Richard L. Hartman. I have over 12 years of formal experience in the Electronics industry which started in analog circuitry and progressed through the disciplines of discrete digital, integrated digital, microprocessor, software, and management. My employment history includes both Engineering and Marketing departments for everything from five-man startups to companies with thousands of employees. Along the way I have designed many successful products - the most prominent of which is probably the Key Tronic KB5151 Enhanced PC Keyboard, the first to have separate cursor and numeric keypads. Over 250,000 KB5151's have been sold and its standard continues to influence keyboard design to this day. My consulting efforts are now concentrated in the area of Local Area Networks - specifically the development of software which runs with, and takes advantage of, Novell's NetWare Operating System. I am a Novell Registered Professional Developer and actively pursue all topics, in all disciplines, which involve this market segment. Products like FPServer are my answer to the extremely high cost of advertising in magazines and trade journals. I simply cannot justify the money necessary to elevate myself and my services above the "noise floor" established by multi-million dollar companies and their multi-page color advertisements. Instead, I invest my TIME writing software which (hopefully) has broad appeal and allows potential clients the opportunity to sample my work without risk or expense. Then, if you like it, you can pay for it. You incur zero up-front expense and zero risk. My consulting services include: Conceptual: A confidential, objective sounding board for new ideas Feasibility: Assessment of technical viability Engineering: Actual product design and development Modification: Adding network intelligence to existing products Testing: Verifying network compatibility Training: Adding network programming to your staff's skill set Recommendation: Network-oriented analysis of your current/future products If you create network software - or are planning to - please contact me: Richard L. Hartman (RLH) Novell Registered Professional Developer 5205 North Mulvaney Court, Spokane, WA 99212-1611 509-924-6576 (Voice) 509-926-4626 (Fax) CompuServe 76350,2275