ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º UpLoadProcessor ³ Ò Ò Ò ³ º ³ º º º ÖÄÄ· ³ º Version 2.04 ³ º º º º º ³ º ³ ÓÄÄĽ Ð ºÄĽ ³ º (c) Copyright 1992-1995 - Stacy Smith ³ Ð ³ º ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Winner of the 1994 PCBoard Favorite Add-On Contest, Other Utilities ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Courtesy of: The Bloom Beacon-Picayune BBS Node 1: *** DOWN TEMPORARILY *** FidoNet ILink Intelec Stacy Smith Sakf”rarev„gen 7, Lgh 27 S-226 57 Lund Sweden ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 1. Introduction ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This system was born out of a need for a universal upload processor. There are many alternative systems available, but they are limited to the ZIP format and perhaps one or two others. Few are able to handle self-extracting archives. Most are limited in the number of levels of archive nesting allowed in a file to be tested. Very few properly handle archives with imbedded paths. Many require the use of a third-party duplicate file checking system if you want to screen your uploads for duplicates. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files over to the ARJ compression format, due to its superior compression ratio over PKZip and its features over LHA (I have since switched back to ZIP...the undertow was overwhelming ). But due to that decision, the need for a universal upload processor became apparent, so off I went. While I was at it, I decided to incorporate other technologies, such as duplicate checking, archive format conversion, customized displays and comments, internationalization, foreign language support, information lines, internal description files, etc., into a single package. This software is the result of my efforts to allow my BBS to handle any archive that my users can throw at it. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 2. Features of the UpLoadProcessor System ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ù Native versions available for both 16-bit DOS and 32-bit OS/2! DOS version is fully OS/2, DESQview and Windows aware, including time slice releasing. ù Identifies and processes ARC, ARJ, HYP, LZH, PAK, SQZ, ZIP, ZOO, GIF and JPEG files, regardless of their file extensions (ideal for software distribution network files such as SDN). ù Identifies and processes ARJ, LZH, SQZ and ZIP self-extracting (SFX) archives. ù Detects, processes and converts any archive with imbedded paths, retaining all path information. ù Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to prevent hacking by hex-editing. (ARJ and LHA are resistant to these type of hacking attempts). ù Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity verification (-AV) stamps and may be retained intact. ù Detects and rejects encrypted ARJ and ZIP archives. ù Uses a recursive processing routine that will allow (theoretically) unlimited nested archives and paths (the only limit is imposed by the OS path). This routine has been tested to 6 levels deep as of this writing. ù Selected uncompressed files uploaded can be processed and compressed using your default format. ù Uploads can be filtered, privileged and TCANned on a wide variety of criteria, including filename, file size, description keywords, etc.. ù Removes known BBS ads from archives; includes BBS ads database maintenance functionality so that sysops can update their BBS ads databases in real time. ULP can also insert a BBS ad (ugh), if desired. ù Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct archive extension to reflect the conversion process. ù Allows the use of up to 10 different archiving programs, all user- configurable. Any archiving program used that is not listed above will be identified using its unique file extension only, until its signature is determined and incorporated into ULP (after a new archive has demonstrated widespread use). ù Archive comments can be customized on an archive-by-archive basis through the use of a template and @-variables. ù Allows the use of up to 5 different file-checking programs, all user- configurable, for virus and trojan checking, third-party utilities, etc. ù Allows the use of a GIF file checking program, completely configurable. ù Rejects GIF and JPEG files based upon image width, height, colors and/or compression. Different values can be selected for GIF and JPEG. ù User-definable disposition (rename or delete) of corrupted, duplicate or other archives (not virus-related). ù User-definable disposition (rename or delete) of virus-infected archives. ù Incorporates it's own duplicate checking system, as well as the associated database processing software. This internal system is extremely fast and it's database is much smaller than other systems. Despite it's size, the possibility of a false duplication is almost 1 in 10 trillion! The system is self-validating, to quickly determine if a database has been corrupted or altered. ù Optional seamless interface with the ZDCS duplication system. ù ULP determines duplication using two filters, total duplication and executable duplication, preventing false rejection by simply counting up the number of blatantly duplicate files as other duplication systems do. ù Converts all uploads into a default archive format of your choosing, or they may be re-archived in their original format (user-defined). Nested and pathed archives can also be converted to your default format, or re-archived using their original format. SFX archives can be archived using your default format, or optionally left alone after verification. Archiving formats can be individually configured to not be converted to your default, effecitively allowing multiple defaults. ù Can utilize a user-defined time window (in months) for acceptance of new upload files, based on the actual or statistical average age of the files within the archive, or optionally, the age of the newest file. ù Supports the use of private and public upload directories. Moves files and upload descriptions from the private directory to the public directory. Rejected uploads can be optionally moved to an offline area of your choosing. Single directory area operation may also be configured. ù Duplication and age limits can be set on an area-by-area basis. ù Honors the '/' identifier in the description marking the file as a private upload for the sysop by processing the file, but not making it public. ù Supports the use of DESC.SDI, FILE-ID.DIZ and VENDINFO.DIZ description files in an archive, user-configurable. The number of lines inserted is also configurable, up to 40 lines maximum. ù Smart word-wrapping word-wraps descriptions or leaves them as entered, depending upon the presence of boxes, etc. ù Can optionally insert an archive or GIF/JPEG information line in the file description that contains various information about the archive or GIF/JPEG files. ù Three modes of online testing are available: slow mode, which completely processes files at the time of upload; normal mode, which fully unpacks the archive and tests each file individually; and fast mode, which scans a ZIP or ARJ archive directly for file CRCs, sizes and dates, and uses the archiving program's internal integrity testing. ù The online tester will accept a redirected ARJ or PKUNZIP archive listing file to pre-verify the duplication and age limits before a user uploads the actual archive, saving him or her wailing and gnashing of teeth. ù ULP can generate COM port status output to inform the online user of the progress of testing. The format of the screen display is completely sysop-designed through the use of template files; different template files can be used for high-speed and low-speed callers. Multi-lingual templates files are supported. ULP supports IRQs 2 through 15, non-standard port addresses and baud rates to 115K in direct mode, supports FOSSIL drivers and the OS/2 SIO API interface. The port information can be defined on the command-line or can be read directly from PCBOARD.SYS or DOOR.SYS. ù Import of FWKCS(TM) contents_signature databases is supported to ease transition to the ULP duplication system. No need to rebuild databases for FWKCS users! ù Archives failed for exceeding duplication limits can be viewed using ULPSM, to allow easy determination of manual archive acceptance. ù User-selectable process logging to a disk file. Two logging modes are available: terse and verbose. A debug logging and operational mode can be utilized to help track down configuration errors. ù Menu-driven windowed system manager for maximum ease of configuration, including context-sensitive help. Automatic installation speeds the configuration and setup process for new users. ù Written mostly in C (and a little assembler) for optimal speed, using Microsoft C/C++ v7 and Watcom C/C++ v10. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 3. Files Included in the ULP Distribution Archive ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ULP.EXE Upload processing program. ULPSM.EXE System and configuration manager for the ULP system. ULPSM.HLP Help data file for the ULP system. BBSADS.DB BBS ads database file. ULP.DOC This file. SUPPORT.DOC List of authorized support sites for my shareware. HISTORY.DOC ULP revision history in reverse order. UPGRADE.DOC Information specific to upgrading from previous versions. REGISTER.FRM Registration form for ULP. FILE_ID.DIZ Internal description file. When you unzip the distribution archive, you should see my PKZIP authenticity verification stamp, and a '-AV' after every file in the archive: # SSU301 The Bloom Beacon-Picayune BBS If there are any files missing or added, or the -AV stamp is missing, the archive may have been tampered with. It would be advisable to call my BBS (listed at the top of this document) or one of the support sites listed in SUPPORT.DOC for the latest version of ULP. The 32-bit OS/2 executables ULP2.EXE and ULPSM2.EXE are distributed in a separate archive named ULP2_xxx.ZIP, where the "xxx" is the revision level of ULP. Since this archive contains only the OS/2 executables, the general distribution archive must be downloaded as well. This was done to reduce the size of the general distribution archive for those sysops not running OS/2 as their operating system. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 4. Program Requirements ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ To the best of my knowledge, the ULP programs will run on most any machine capable of running PCBoard 14.5+. My BBS setup is OS/2 and DOS/DESQview on a LANtastic network with hard disks and CD-ROMs, but other sysops that I have been in contact with have successfully implemented ULP on setups with other varying hardware and software. ULP has been developed and tested using the following third party utilities: ARJ 2.10 and higher (by Robert Jung) HYPER 2.5 (by P. Sawatzki and K. P. Nischke) LHA 2.12 and higher (by Haruyasu Yoshizaki) LHarc 1.13c (by Haruyasu Yoshizaki) PAK 2.51 (by NoGate Consulting) PKPAK 3.61 (by PKWare) PKZIP 1.10 and higher (by PKWare) RAR 1.53 (by Eugene Roshal) SQZ 1.08.2 (by Jonas Hammarberg) ZOO 2.01 and higher (by Rahul Deshi) AntiAd 0.98á and higher (by Stacy Smith) F-PROT 2.07 and higher (by Frisk Software International) SCAN V82 and higher (by McAfee Associates) GIFTEST 4.0 Beta 10 and higher (by Max Bernard/Dave Navarro) ZDCS 2.03 and higher (by Stacy Smith) SHROOM 2.3a (by Davis Augustine) UnZip 5.12 (by Info-ZIP) ZIP 2.0.1 (by Adler, Wales, Gailly and Rommel) OS/2Scan 2.2.0 (by McAfee Associates) PipeDOS (by Scott Maxwell) The ULP system requires DOS 3.x or later (or compatible, such as an OS/2 DOS VDM), as it uses DOS SHARE-compatible file reads and writes, and can use the DOS PATH to find the archiving and other utilities. The 32-bit OS/2 version of ULP must be run under OS/2 2.0 or later. ULP's memory requirements are relatively small (about 250K for ULP.EXE, 450K for ULPSM.EXE), and can easily live in the same amount of memory as PCBoard (450K as recommended by Clark Development). Note that all programs are spawned or shelled, which reduces the free memory for the program being executed. It would be a good idea to have as much free conventional memory as possible (ULP itself cannot use EMS or XMS memory except for swapping), especially if you use the ARJ compression system, which requires more than 300K itself to run. None of these limits exist for the 32-bit OS/2 versions of ULP, since we are using a real operating system. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 5. Registration ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The ULP system is not free; nor is ULP is crippled to force registration. ULP is fully functional, and will always remain so. The primary difference is no time delay and beg message once registered. The time delays will begin 45 days after the initial installation of ULP. Why register? Besides a clean conscience, you will get a diskette including the latest version of ULP and a registration key that will work for all future versions of ULP, and will remove the delay and message at the end of execution of each program. The registration fee for ULP is $25 for hobbyist BBSes. The registration fee for commercial BBSes, defined as running your BBS in the course of a commercial business (e.g. more than 10 nodes), is $40. Please print the file REGISTER.FRM and fill it out. You can print out the form by issuing the following command from the DOS prompt: TYPE REGISTER.FRM > PRN Credit card registration is available via the Central Core BBS; refer to REGISTER.FRM for complete information on credit card registration of ULP. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 6. License, Warranty and Disclaimer ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ I'll keep this part short and sweet, and dispense (mostly) with the legal-ese: License: You are allowed to use ULP for 30 days, after which you must either register ULP or stop using it completely. Decompiling, disassembly or any other form of reverse engineering the ULP programs for any purpose is prohibited. ULP registration is a license for your use of ULP; I retain ownership of the software. A single registration applies to a single BBS system, regardless of the number of computers used in the system. If you run two or more distinct BBS systems on the same computer or network (with different names), you require two or more ULP registrations. ULP registrations are not transferrable; you cannot sell your registration to another sysop. Refer to the registration form for the currect pricing structure. Warranty: There isn't one. The only thing I'll guarantee is that ULP will take up disk space, and will disappear when deleted. Disclaimer: I'm not responsible for anything bad that happens. ULP works here, but I cannot be held responsible for it not working on your computer or doing any damage to hardware or software. If these aren't agreeable with you, then the best thing to do is delete ULP right now. I'll do my best to help any user (registered or not) that wants to use ULP, and I'll act on bug reports as quickly as possible, but I simply cannot and will not be responsible for anything bad, like lost data, disk crashes, or whatever else you can think of. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 7. Conceptual Background ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ******************************************************************************* READ THIS SECTION CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!! ******************************************************************************* Since the ULP system is much more comprehensive than other upload processing software, and therefore more complex, this overview and concept explanation should help you understand how ULP is designed and how it can be best used for your BBS. Some of this information may be specific to PCBoard sysops, but the general concepts remain the same. BATCH PROCESSING: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ As a minimum setup, you MUST run ULP as an event-mode batch processor, since ULP handles most of the database updating, archive conversion, file and description moving, archive information line computation, and other features during the batch run. THIS IS NOT AN OPTION!!! When running ULP in a batch mode (batch, override), such as processing new files that come in on tape, CD-ROM, file distribution network, etc., ULP's operation can simply be described as follows: ULP looks in the source area and processes all new files it finds (files it hasn't seen before). ULP moves the good files to the destination area, if one is defined. ULP moves the defective files to the failure area, if defined. Pretty simple concept, huh? ULP's batch modes do what you tell it to in the upload directory areas configuration; it doesn't know or care about private areas, public areas or otherwise. Through the use of a self-maintaining data file, ULP knows what it has and hasn't already processed in every source subdirectory configured. This allows enormous flexibility for a variety of tasks. Some possibilities: - Local uploads: Configure an input directory as your ULP source area, and your BBS new uploads directory as the output. As you get new files, such as downloads from your own BBSing activities, place any files you want to locally upload into the input directory and the batch processing will process all new files and move the good files into your BBS new uploads directory. Optionally, a failure directory can be configured to have the bad files moved into for better organization. - Robocomm R&P: This would be setup similarly to the local uploads, where you pass the Robocomm download directory and download DIR listing that it creates during R&P runs to ULP as the source area, and configure your new uploads area as your ULP destination area. - File distribution nets (.TIC files): ULP doesn't toss .TIC files (no sense re-inventing the wheel), but ULP's batch processing works very well with most any .TIC tosser. There are two ways this can be implemented. First, the .TIC tosser can toss all the files into a holding directory, and then ULP can move the good ones to the new uploads subdirectory. If this way is used, you simply need to configure the holding directory as the ULP source area, and the new uploads directory as the destination. The other way is to have the .TIC tosser toss the files to their final destination in your file directories. The requires that you configure every subdirectory that the .TIC tosser may toss files into as the source directory, leaving the destination area blank. This allows ULP to scan all files in all directories, selecting only the new ones, and process them. In this implementation, it would be a good idea to configure a failure area so that defective files are moved out of the available file area to prevent user access to them. ULP's batch processing modes are designed to be able to be run without shutting down your BBS nodes, however it would be a good idea to disable uploads during batch processing. The reason for this is that if an upload occurs in a directory currently under event processing, the directory listings may become a source of contention if they both try to update it simultaneously. This is very small risk, but it was documented anyway just in case. ONLINE TESTING: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ I believe that all responsible BBS sysops verify all of their uploads prior to posting them, in order to protect both themselves and their users. ULP is designed with idea in mind. Most, if not all, sysops process uploads in one of two ways (listed with benefits and liabilities as I see them), regardless of what upload processing software they use: 1) Make all uploads private, processing them during a system event. BENEFITS: ù Takes up very little on-line time on the user's part to process archives if the re-compression process is skipped while online. ù Allows the conversion of all archives to a default format, so that the BBS archives are consistent. ù Allows the BBS to accept any archive format...face it, it's hard enough to get some of these weenies to upload, much less compress them the same way. LIABILITIES: ù Files are not available immediately for download. ù Does not catch duplicates or aged archives until after the user has uploaded them, and perhaps leads to abuse by clever (?) users. (It is assumed that these sysops still use the venerable 'PKUNZIP -T' in their PCBTEST.BAT...) 2) Process (test) each upload online after the user uploads them, and making them available for immediate download. BENEFITS: ù Catches duplicate, defective and aged archives while the user is online, denying him upload credits. ù Files are available immediately for download if they are not made private in the PCBoard setup. LIABILITIES: ù Takes up on-line time for a user, potentially adding to his long-distance phone bill, discouraging further uploading; this process is typically quite slow for large archives. ULP also implements an online processing system, with varying modes of operation from complete processing to a very fast scan of the archive directly for needed data. These modes will allow you to run your BBS in the most efficient manner possible for both you and your users. Pay attention to this part!!!: PCBoard (as do many BBS platforms) normally has two upload directories for each conference: a private and a public directory. When PCBoard invokes PCBTEST.BAT, the upload is currently in the private directory. If the archive fails the testing, it will remain in the source directory. However, if it passes, one of two things will occur depending upon your system setup: - If you have made all uploads private in PCBSETUP, the file will remain in the private directory. - If you have not made uploads private, it will be moved BY PCBOARD (not ULP) to the public directory. This is an important point: during online testing, ULP does not move the file in any way; the BBS software is expected to disposition the upload file itself. ULP feeds back the testing results to the BBS software in two ways, via semaphore files and via an errorlevel. The errorlevels returned by ULP are listed in the appendix of this file. In PCBoard, if you have made all uploads private (via PCBSETUP), the setup and configuration of ULP is a snap: the source directory is the private upload directory, and the destination is the public directory. However, if you want to allow users access to untested uploads, then your source directory is the public upload directory, and the destination information is left blank. To illustrate the operation: MAKE ALL UPLOADS PRIVATE ³ ALL UPLOADS AVAILABLE AFTER TESTING ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 2 directories: C:\PRIVATE ³ 2 directories: C:\PRIVATE C:\PUBLIC ³ C:\PUBLIC ³ User uploads a file, gets placed ³ User uploads a file, gets placed in C:\PRIVATE by PCBoard ³ in C:\PRIVATE by PCBoard ³ ULP tests it online ³ ULP tests it online ³ PCBoard leaves file in C:\PRIVATE ³ If it passes, PCBoard moves it to ³ C:\PUBLIC; if it fails, PCBoard ³ leaves it in C:\PRIVATE ³ ULP in the event processes all ³ ULP in the event processes all *new* new uploads found in C:\PRIVATE ³ uploads found in C:\PUBLIC since the since the last event and moves ³ last event all good uploads to C:\PUBLIC ³ Further, ULP's online testing modes also have three different modes of operation: slow, normal and fast. Slow mode completely tests the upload exactly as ULP does in the batch event. Note that you MUST use the "all uploads public" mode of operation to run slow mode (this shouldn't be a problem, since there's little logic in forcing a user to wait for complete processing of an upload, only to be held until later). ULP's online normal mode de-compresses the files, performs file, duplication and age checking, and then deletes the extracted files and returns to the BBS, informing the BBS of the test results. It does not re-compress the archive, remove BBS ads, add information lines, etc.; this is saved for the event processing. This mode can be used with both setup paradigms, making all uploads private or public. Fast mode DOES NOT decompress the file; it firsts performs an archive integrity check, scans ARJ and ZIP archives directly for duplicate and age information, and then returns to PCBoard (if the archive is not ARJ or ZIP, then normal mode is forced). Typical fast mode scans of multi-megabyte archives are performed in less than 5 seconds! In fast mode, file checking (viruses, etc.) is left for ULP to do in the event (which is why the above discussion regarding private/public directories is important). This mode can also be used either in making uploads public or private, although it would be a good idea to make them private with this mode, since the uploads are not file-checked (e.g. for viruses) during test. ULP's online testing modes will also accept a redirected ARJ or PKUNZIP listing text file with the special name VERIFY.ULP (no other name is acceptable) as input to pre-verify an upload for a user, before the user actually spends his time uploading the file only to find out it won't pass the limits you set. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 8. Installation ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Now, on to installation of the ULP system. ULPSM makes the installation ULP very easy, since it has a built-in initial installation system and context-sensitive, cross-referenced and fully indexed online help. After reading the general concepts described in the preceding section, the following outlines a general guide to installing the ULP system in the shortest time: 1. Make a subdirectory on your hard drive. For the purposes of this document, we'll call it "C:\ULP". Unarchive the ULP distribution archive into this subdirectory. You've more than likely already made it this far, since you are reading this file. * NOTE: The help file ULPSM.HLP is required by the ULP programs and must be located in the same subdirectory as the ULP executables for proper operation! 2. The ULP system opens several files at once for various reasons. You should have a minimum of FILES=40 per node in your system CONFIG.SYS file, since ULP is run in conjunction with your BBS. On the machine/node that runs the ULPSM duplication database compilation event, I suggest at least FILES=50, since the ULPSM compilation routine opens up to 20 files simultaneously. 3. If you are running ULP under a network or a DOS multitasking operating system, you should already have DOS's SHARE.EXE loaded. You must have SHARE loaded in order to take advantage of the file sharing and locking methods used by the ULP programs to prevent data loss. (If you are running a single-node system without a multitasker, SHARE is not needed). * NOTE: MS-DOS has a documented bug when SHARE is loaded high, where it loses the table in memory. Load SHARE low to prevent potential sharing problems! 4. Make sure you have your BBS software set to swap out of memory when running an upload processor. This is required due to memory requirements of archivers, virus testers, etc., and probably is already set for most BBS packages. Check anyway... 5. Run ULPSM using the following command line: ULPSM -CULP.CFG The first time you use a new configuration filename in the ULPSM command line, ULPSM will create a configuration file and generate the required external files that a standard ULP implementation uses. When you are asked to save the configuration, save it. From this starting configuration, only a few specific adjustments need to be made. Note that the pre-configured archiver command lines are different based upon whether the DOS or OS/2 version of ULPSM is used to create the configuration file. 6. Run ULPSM again, with the same command line as above. You will need to make the following configuration edits to complete your installation; don't forget about the online help...there's a lot of useful information in there! In addition, ULPSM will check for common configuration errors and provide messages indicating any problems that it may find. Menu A (General options): - If you are running PCBoard, enter the full path and filename for your DOWNLOAD.TXT file if automatic updating is desired. Otherwise, leave it blank. Menu B (Upload directories): - Select an unused slot and press ENTER. Enter the appropriate subdirectories and directory listings for your upload processing. Refer to the following section titled "Configuration" and the online help for more detail on this topic. For the time being, you may only want to configure one or two sets of upload directories for testing purposes. Menu E (Archivers): - ULPSM pre-configures the most common archivers used (ARJ, LZH and ZIP for DOS, and LZH and ZIP for OS/2). If one or more of these archivers are not available in your DOS or OS/2 path, you will need to either put them in the path, provide the path directly in the command lines in ULPSM or remove them from the ULP configuration. Putting the required archivers in your path is more than likely the simplest solution. Menu F (Virus/file testers): - Due to the wide variety and utilization of virus scanners available, ULPSM makes no assumptions as to what you wish to use. In this menu, configure one or more file and virus testers to be used by ULP. Pay special note to the ULPSM help system, as it contains recommended command lines for many of the more popular DOS and OS/2 virus scanners. Menu G (Duplication checking): - If you are using the ZDCS duplication system, you will need to change the default setting from 'I' to 'Z', and provide the path to ZDCS in the "Edit duplicate checking parameters" submenu. - If you are using the internal duplication system, you will need to build and compile a database. Select submenu B (Add files to duplication database) and use one of your download directories as a starting point. After ULPSM is finished, select submenu C (Compile duplication database) to compile the database. More detail on building your database will follow; for now, this will get us a working database. Menu J (GIF file testing): - If you wish to use GIFTEST to test GIF uploads, place the GIFTEST command line in this menu. Again, refer to the online help for the recommended command line. Menu L (Online testing): - ULPSM defaults to the normal online testing mode with a switchover to fast mode at 500K. If either slow or fast testing modes are desired, alter the settings. Menu M (Process data file): - Select submenu B to initialize the process data file. Generally, initialization is required only once. Menu N (Advanced options): - If you are not running PCBoard as your BBS software, these settings may make integration of ULP into your system easier. If you are running PCBoard, adjustment of these values is usually not necessary. Exit ULPSM, saving your configuration edits. 7. Take a look at your ULP subdirectory now. You will see a dozen or so external configuration files that ULPSM automatically created. These can be edited either with a conventional text editor or through ULPSM using the F2/F3 hotkeys, where appropriate. One of the newly-created files needs to be relocated. Copy the PCBTEST.BAT file to your \PCB subdirectory, copying over the existing one. Back it up if you think you might want it back later (I don't think you will, though ). You will also find a file named ULPBLT. This is a generic bulletin that you may wish to post on your BBS to explain to your users the process for pre- verifying uploads to your system via ULP. 8. You are now all configured, and almost ready to go. You now need to build a complete ULP database if you are using the internal duplication database. This can be postponed until later if you wish to do some testing or experimentation with ULP prior to investing the time in constructing a complete duplication database. Refer to the section titled "Internal Duplication Checking" for more some additional discussion. 9. Edit your system event file, adding the following lines somewhere in it: C: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Change as necessary CD \ULP ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ to match your setup ULP -CULP.CFG -MBATCH -T0 ULPSM -CULP.CFG -S This will run the ULP event batch processor and then compile your duplication database with ULPSM (the last line is required only if you are using ULP's internal duplication database system). 10. That wasn't so bad, now was it? Feel free to poke around with other settings once you have verified that ULP is functioning properly. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 9. Configuration ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Most of the information required to install ULP is contained in the fully context-sensitive, indexed help system in ULPSM. This exhaustive information will not be repeated here for brevity, but some topics that require additional clarification will be addressed here. UPLOAD DIRECTORIES: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ In the past, this topic has been a point of some confusion to sysops. ULP makes use of the upload directories configured in ULPSM during both online and batch processing, but in different ways. When testing a file online, ULP is provided all necessary information by the BBS software. It really doesn't need any of the upload directories defined in the ULP configuration; however, it does a comparison to the path passed by the BBS software and the areas configured to try and find a match. If a match is found, ULP will use any area-specific settings (e.g. duplication and age limits) that are configured. If no match is found, ULP will spit out a warning and continue with the default settings. On the other hand, during batch (and override) processing, ULP makes extensive use of the upload directory configuration. It will go through all upload directory sets configured, in order, processing any new files found in the source area, moving the good files to the destination (if configured) and any defective files to the failure area (if configured). Generally, if you make all uploads private, your source area will be your private upload area and the destination area will be your public upload area. If you make all uploads public, the source area will be your public upload area and the destination area will be blank. In either case, failure areas can be used if desired. Refer to the section titled "Conceptual Background" for more detail. ONLINE TESTING: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ To use ULP for on-line testing of archives, the following command line should be invoked. During the initial configuration, ULPSM creates a PCBTEST.BAT for PCBoard sysops to use, which should be all that is necessary for PCBoard sysops. C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 However, for non-PCBoard sysops, the following discussion outlines how to install ULP for online testing in your BBS package. Two of the three passed % parameters to the batch file are required: the filename, passed as %1 by PCBoard and the mode, passed as %2. The temporary description file, passed as %3, is not required but will be updated by ULP if passed. The filename (-F switch) should include a complete pathspec. ULP will compare the path to the source upload directories configured in ULPSM, and if a match is found, ULP will use any directory-specific settings configured. Therefore, the path(s) configured in ULPSM should match those configured in your BBS software for new uploads. The only acceptable modes (-M switch) for online testing are "UPLOAD", "TEST" and "ATTACH" (these correspond to PCBoard's modes). Upload mode is basically a full process, and is the most commonly used mode. Test mode unpacks the upload, performs file-checking and returns; this is done to allow the online user to test a file on the BBS in case a problem is found after download. Attach mode performs a complete test, but doesn't fail the upload under any circumstances; this is used primarily for attaching file to messages on the BBS. The temporary description file (-D) is created by the BBS software and is expected to be in a format identical to the other upload directories as configured. If it is not, do not use this parameter and let the event mode execution of ULP update the description. ULP will gather any other information that is required for operation from the door drop file located in the startup subdirectory (PCBOARD.SYS and DOOR.SYS are supported). If desired, the serial port information can be handed directly to ULP by using the -P and -B command switches: C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P3F8,4 -B57600 The -P parameter can be either 1 or 2, representing standard COM1 and COM2, or in the format "address,IRQ" as illustrated above for non-standard serial ports. The locked DTE baud rate of the port (not the DCE carrier speed) can be passed via the -B parameter. If you are using the DSZPORT environment variable to define the port IRQ and address to DSZ, ULP can also use this information as well. If the drop file indicates that a non-standard port is in use (e.g. not COM1 or COM2), ULP will automatically look for the DSZPORT environment variable. Refer to the documentation for DSZ for the proper specification of the DSZPORT environment variable. ULP is capable of using a FOSSIL driver, but you must tell it to do so via the ULP command line. Use the -X command switch to tell ULP to use the FOSSIL driver: C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -X ULP will use the port specified in the door drop file or on the command line via the -P switch. As a quick technical aside, with most FOSSIL drivers, the FOSSIL port number is normally 1 less than the COM port number. In other words, COM1 is FOSSIL port 0, COM2 is FOSSIL port 1, etc.. ULP handles this conversion internally, but if necessary, you can force a specific port number via the -P command line parameter: C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P1 -X The above command line will force ULP to use FOSSIL port 0, which is by convention, COM1. Similarly, ULP is also capable of talking directly to the OS/2 SIO API. In order to use this mode, you must tell ULP to do so via the -O command line switch: C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -O Note that the OS/2 version of ULP obviously must use the API, so the -O switch is not required (but is accepted for compatibility's sake). REMOTE DISPLAY TEMPLATES: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The remote display templates offer tremendous flexibility for sysops to customize the user display that is produced by ULP. While the template file design may seem a bit odd, it provides maximum flexibility for customization. Basically, display templates are comprised of two sections: the form, and the responses. When ULP is started up to perform an online test, the appropriate template is loaded and the form is immediately displayed. Special {-variables are used in the form to tell ULP where in the form to put the responses. As the file is processed by ULP, at special points in the processing ULP will output the responses, selecting the appropriate response based upon pass or failure. If a process is not performed (such as packing when testing in normal or fast modes), no response is output for that process. The form can be edited to eliminate these unnecessary lines if desired and appropriate. As an example, review the following simple display template: ; ; **************************************************** ; * UpLoadProcessor sample remote display template * ; **************************************************** ; ; Form definition ; BEGIN_FORM Verifying @FILENAME@ from @USER@ on node @NODE@... ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ UpLoadProcessor 2.0 ³ Registered to: @BOARDNAME@ ³ (c) 1992-95 Stacy Smith ³ [Processing at @SYSTIME@ on @SYSDATE@] ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Upload format: {FMT} Unpacking file: {UNP} Testing file integrity: {CHK} Duplicate checking: {DUP} Age checking: {AGE} Packing archive: {PCK} Other checks: {MSC} END_FORM ; ; Response definitions ; BEGIN_RESPONSES @OPTEXT@ @OPTEXT@ Unpacked OK Unpacking failure! Passed virus checks Failed virus checks Passed duplication Failed duplication Passed age Failed age Compressed OK Compressing failure OK Failed! END_RESPONSES ; ; End of UpLoadProcessor template file ; The actual form is sandwiched between the two keywords "BEGIN_FORM" and "END_FORM"; 18 lines by 78 columns is the maximum size allowed in the form. Various @-variables can be used in the form and responses. A complete list is in the ULPSM online help; unsupported @-variables will not be translated. There is no support for @CLS@; the reason for this is that ULP automatically clears the screen before displaying the form. This allows ULP to properly determine the screen location of responses on a consistent basis. Note the special variables {FMT}, {UNP}, {CHK}, {DUP}, {AGE}, {PCK} and {MSC}. These variables do nothing except tell where ULP where the specific responses are to be located, and have a different format to help prevent confusion. During form display, they are removed with no output so that they can ignored when attempting to align text. The following table defines the meaning of these seven special macros: {FMT} Location for the upload file format known/unknown response {UNP} Location for the unpacking pass/fail response {CHK} Location for the file/virus checking pass/fail response {DUP} Location for the duplicate checking pass/fail response {AGE} Location for the age checking pass/fail response {PCK} Location for the packing pass/fail response {MSC} Location for the miscellaneous pass/fail response The "miscellaneous tests" defined are primarily the TCANs. This response is always the last response displayed during processing. Similarly, the responses are sandwiched between the two keywords "BEGIN_RESPONSES" and "END_RESPONSES". @-variables can also be used in the form and responses, but all responses must be 50 characters or less. The order of the responses is critical; no responses can be skipped (but they can be left blank). The response order is as follows: BEGIN_RESPONSES Archive format identified response string (usually just @OPTEXT@) Archive format unknown response string (usually just @OPTEXT@) Unpacking passed response string Unpacking failed response string File/virus checking passed response string File/virus checking failed response string Duplicate checking passed response string Duplicate checking failed response string Age checking passed response string Age checking failed response string Packing passed response string Packing failed response string Miscellaneous tests passed response string Miscellaneous tests failed response string END_RESPONSES A special macro called @OPTEXT@ can be used in the responses. For each possible response, the @OPTEXT@ macro will be loaded with special process- specific information, such as duplication ratio and archive age. The following list describes the contents of the @OPTEXT@ macro for each of the seven possible responses: {FMT} @OPTEXT@ contains the archiving format extension or "Unknown"; if the archive has an -AV or is secured, @OPTEXT@ will be appended with "(-AV/secure)". {UNP} @OPTEXT@ contains the program name used to unpack the upload. {CHK} @OPTEXT@ contains the last file checker executed (primarily for failures). {DUP} @OPTEXT@ contains the total and executable duplication ratios in the format "100%/100%". {AGE} @OPTEXT@ contains the age of the archive in months. {PCK} @OPTEXT@ contains the program name used to pack the upload. {MSC} @OPTEXT@ contains the name of the test (primarily for failures). Note that by displaying results to the remote user can be a double-edged sword. While it can prevent the requisite questions from a user as to why an upload failed, this could also allow the "clever" user to bypass a failure by tweaking the archive contents just enough to make it pass. Consider this before you use the @OPTEXT@ response macros. All comments in the template file begin with a semi-colon, however, comments are not permitted between the BEGIN_FORM and END_FORM form definition or between the BEGIN_RESPONSES and END_RESPONSES response definition. * NOTE: While the remote display template system is designed primarily for ASCII and ANSI, RIP screens *may* be possible (I don't know as I haven't tried it) by creating the appropriate RIP script command strings in the form and response definitions. However, the RIP graphics will not be shown in the local display window. For those who may be curious, the above example template will produce a display that looks like (for a passed upload): Verifying FOO.ZIP from JOE BLOW on node 4... ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ UpLoadProcessor 2.0 ³ Registered to: Nice Guys 'R Us ³ (c) 1992-95 Stacy Smith ³ [Processing at 12:01 on 01/02/95] ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Upload format: ZIP Unpacking file: Unpacked OK Testing file integrity: Passed virus checks Duplicate checking: Passed duplication Age checking: Passed age Packing archive: Compressed OK Other checks: OK COMMENT TEMPLATE: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The comment template allows customization of a comment for each file processed through the use of @-variables. Archive statistics, file descriptions, processing date and time, BBS advertising, etc. can all be implemented in this template for display by using @-variables. A complete list of @-variables and macros is available in the online help. The following is a suggested comment template: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ This archive has been fully tested and verified using UpLoadProcessor ³ ³ by your Sysop to ensure your system's safety and file quality! ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Processed at @SYSTIME@ on @SYSDATE@ Archive statistics: Number of files: @NUM@ Oldest file: @OLD@ Newest file: @NEW@ Total bytes: @BYTE@ Archive description: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ @DESC@ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 10. Internal Duplication Checking ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When first installing ULP, if you plan to use ULP's internal duplication database system, the duplication database must be created from scratch. If you have mostly ZIP and ARJ files, then this can be very quick (on the order of 5 minutes per 1000 archives on a hard disk, CD-ROMs typically take between 30 minutes and an hour...these numbers are from my experience, your mileage may vary). As usual, the online help provides a lot of useful information on specific duplication database manipulation options. If you use CD-ROMs on your BBS, odds are that pre-built databases are already available for your CD-ROM, greatly reducing the amount of time required to get your system ready. ULPSM can merge these pre-built duplication databases with your main database in a matter of seconds versus spending the time building it yourself. If you are a user of the FWKCS duplication database system, ULPSM can import and translate the FWKCS database directly into the ULP format. This will also be preferable from a speed standpoint to rebuilding the database from scratch. If you have files that are off-line, they can be added to your duplication database fairly easily. Simply copy your offline files to a temp directory (for the sake of argumentation, let's call it "C:\TEMP"). You can then add them to the duplication database via ULPSM. After the offline files are added, just delete them from the temporary subdirectory, and if someone uploads a file that you already have off-line, it will be rejected by ULP. Once you have your database built, regular maintenance on the duplication database files is required. This will compile any new data from the day's uploads into the main database, and remove any added temporary data from ULP's online testing. This is not required to be done every day, but performance will degrade as more and more files (e.g. hundreds or thousands of uploads) are processed without compilation. To control duplication database size, database entries can also be purged from the database. Removal is based upon the file date represented by the entry, NOT the date the file entry was made into the database; these are not one and the same. In general, this function is not required...ULP's internal database system sees no performance degradation until the database exceeds 30 megabytes (as a baseline, about 75 full CD-ROMs), which no one has done yet. If you do wish to purge, purge using an age of at least twice your configured age limit...this will help ensure that required data is maintained. Note that ULPSM also locks the duplication database, preventing any other program, including ULP, from accessing it. I strongly suggest you have uploads disabled when running ULPSM to compile your database to prevent upload failures due to the inability to access the database. At the minimum, perform the compilation at a time when uploads are not likely to occur. As with any other database system, you should backup your ULP duplication database and index files regularly. ULPSM validates your duplication database during compilation to ensure that it hasn't been corrupted, but if corruption occurs (due to crashes, power loss, deletion, bad karma, etc.), the database cannot be repaired. Therefore, backup regularly!!! ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 11. Other Topics ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ While the ULP system is mostly automatic, there are some occasions where operations may have to be done manually. The following topics discuss some of the issues related to running ULP manually, including some command line switches. OS/2 SPECIFIC VERSION (ULP & ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The OS/2 executables of ULP and ULPSM are native 32-bit executables that require OS/2 version 2.0 or later. They are completely compatible with the DOS versions of ULP and ULPSM, including all configuration and data files, but do not have some of the functional limits imposed on the DOS versions due to memory constraints. However, it should be noted that separate configurations will be required if you wish to use both the DOS and OS/2 versions of the ULP programs since the external utilities are different in both name and command lines. For example, since PKWARE hasn't updated their PKZIP program for OS/2 beyond version 1.02, you will need to use an alternate ZIP program, such as InfoZIP's ZIP 2.0.1 or later. These command lines are, of course, different, hence different ULP configuration files are required. In addition, during testing, enhanced speed has been noted when *not* running external programs in a window. This is partly due to the VIO speed of OS/2 and CPU overhead of the I/O redirection thread. You should not use DOS external programs in the OS/2 version of ULP. However, if you must use an occasional DOS program, you should use PipeDOS, a utility by Scott Maxwell that correctly passes the program errorlevel back to the calling OS/2 program, which is a requirement for ULP to operate correctly. After installing PipeDOS per it's instructions, simply configure the DOS command line as you normally would in ULPSM, but the first argument before the program name will be "pipedos", e.g.: pipedos command arg1 arg2 ... PipeDOS-called DOS programs should not be run in a DOS window. Also, PipeDOS- called programs are very slow, so I recommend you use them only for programs that are called infrequently and that don't have OS/2 counterparts (e.g. ARJ and RAR). ONLINE HELP (ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The online help is fully indexed and cross-referenced with other related topics to ease navigation through the database. If some fields seem to have relatively little information, this generally means that another topic, normally on a higher-level menu, has more in-depth information. If you have difficulty finding a topic, go into the index and locate the pertinent titles to find the help you need. The general idea behind ULP's documentation is that this document outlines how to best install and use ULP. The online help outlines configuration information and some instructional information on ULPSM. DISPLAY READABILITY (ULP & ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP and ULPSM both utilize time delays at certain points in the process to allow users to see what's going on with ULP. The default time delay is 3 seconds, but can be altered between 0 and 10 seconds via the -T command line switch. Generally, during the event batch processing and online processing of uploads, you should set the time delay to 0 for maximum speed. For example, to change the time delay to 5 seconds for a run of ULPSM: ULPSM -CULP.CFG -T5 When manually running ULP or trying to debug a configuration error, it may be helpful to use a longer time delay to see exactly what ULP is doing normally at high speed. QUIET (ULP & ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP and ULPSM normally issue a beep on an error or warning, but the beep can be disabled using the -Q switch: ULP -CULP.CFG -MBATCH -Q ULPSM -CULP.CFG -Q ESCAPING FROM LONG PROCESSES (ULP & ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ When running long, time-consuming processes, namely ULP's batch processing modes and ULPSM's database addition, it is possible to abort the process by pressing the ESC key. Note that ULP and ULPSM may not immediately respond! They must finish the current task before allowing you to abort the process. Further, if you are processing multiple subdirectories in a run, the abort will affect only the current subdirectory. ULP and ULPSM will start the next subdirectory after cleaning up from the current abort. This allows you to pick and choose what to process if desired. DESQVIEW (ULP & ULPSM): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ The DOS versions ULP and ULPSM write text directly to video for speed. If you experience bleed-through of the ULP video in DESQview, you will need to enable the flag for those windows that will run the ULP software to tell DESQview that applications write directly to video (first page of settings, near the bottom). That should eliminate the bleed-through. DEBUGGING (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ When attempting to find a configuration error or track down a potential bug in ULP, using debug mode will be a great help. Debug mode will slow down the ULP display, force all external programs to run full-screen and dump virtually all screen output to the log file. To use debug mode, add the -! switch: ULP -CULP.CFG -MBATCH -! All bug reports must be accompanied by a debug log for me to be able to figure out the problem. OVERRIDE MODE (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ During the course of operation, ULP may (depending upon your configuration) rename archives that have been found to be defective in some manner according to the following convention: .UNK Unknown archive format .DOS DOS reserved keyword found in archive .ERR Error occurred while unpacking archive (archive integrity failure) .CHK Error found while file checking archive file (virus, etc.) .DUP Excessive duplicate files contained in archive .PCK Error occurred while repacking archive file .AGE Age limit exceeded by archive file .ENC Encrypted file found in archive .TCN File was TCANned .BAD Error found while testing GIF file .RES Unacceptable GIF or JPEG resolution .GLT GIF compressed with GIFLITE .WRK Unable to create work space for processing file If you feel that these files are acceptable after reviewing them, you can force them to be accepted by using override mode, e.g.: ULP -CULP.CFG -MOVERRIDE This will re-process ALL files in the source area (or the failure area, if that is where the defective files are) and ignore the results of TCANs, duplication and age, moving them to the destination area (if configured). Override mode will not override unpacking, packing, integrity and virus errors, however, for the safety of your board and your users. Also, override mode is of little use if your upload areas are not utilizing a destination area. If selected files need to be overridden, but not the entire set of failed uploads, you can specify a filespec on the command line via the -F switch. For example: ULP -CULP.CFG -MOVERRIDE -FFILENAME.ZIP ULP -CULP.CFG -MOVERRIDE -F*.ARJ Since override mode operates on the upload directory sets configured in ULPSM, paths are not required or supported in the filespec passed in the -F switch for override mode. Any included path in the -F parameter will be ignored by ULP. RETEST MODE (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP can retest for viruses, etc. all archives found in the subdirectory passed to it via the -F switch. ULP will not perform any TCANning, duplication checking or age checking, nor will it repack the archive. It will simply unpack and archive and file check it; this allows sysops to use newer versions of virus scanners periodically to look for viruses that may have been missed during the original file processing with an older revision of the virus checker. Some example command lines: ULP -CULP.CFG -MRETEST -FD:\PATH\ ULP -CULP.CFG -MRETEST -FD:\PATH\*.ZIP CONVERT MODE (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP can also perform a mass conversion of the archives found in the path passed to it to your default archiver. ULP will retest and convert all archives found in the subdirectory indicated using the same processing flags as new uploads. For example: ULP -CULP.CFG -MCONVERT -FD:\PATH\ ULP -CULP.CFG -MCONVERT -FD:\PATH\*.ARJ Convert mode does not perform any description insertion or updating; it is primarily to permit mass conversion of archives in bulk from one format to another. LOCAL MODE (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ When ULP performs online testing, it expects to find a door drop file and to generate a remote display to a user over the modem. ULP also determines at startup whether an upload is a local upload, however this requires a drop file as well. By using the -L switch, you can force ULP to perform an online mode test without a drop file: ULP -CULP.CFG -MUPLOAD -L -FD:\PATH\FILENAME.EXT This mode can be used to plug ULP into another program as a single file processor where a remote display is not required or appropriate. RETAIN ORIGINAL ARCHIVE DATE (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP normally stamps all uploads with the current date and time of processing. If you wish to keep the original archive date, add the -R switch to the command line: ULP -CULP.CFG -MBATCH -R Note, that this doesn't affect the date inserted in the directory listing for the upload; this affects only the file date stamp on disk. NODE NUMBER (ULP): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ULP normally gets the current node number from the door drop files, however this can be overridden on the command line using the -N switch should the need arise. Normally this is used only for online testing modes, since the ULP program manages node contention on its own to prevent node number duplication and processing collisions. An example of node number definition: ULP -CULP.CFG -MBATCH -N100 Use this switch only if you absolutely need to; under most circumstances it is not required. DISABLE 16550 FIFO (ULP, DOS versions only): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ If your BBS is running on an oddball 16550-compatible serial port, such as early Western Digital UARTs and Hayes ESPs, you may get better performance by disabling the FIFO operation of ULP during online testing mode. This is done by adding the -1 switch to the command line in PCBTEST.BAT (this is the only location where you should need to disable 16550 FIFOs): C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -1 HANDSHAKE METHOD (ULP, DOS versions only): ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Serial I/O requires that the ports handshake in some fashion to know when to start and stop data transfer; two methods are commonly used, either separate or in combination. The most common is hardware (also referred to as RTS/CTS) and this is the ULP startup default. The other method, which is used primarily for compatibility with older equipment, is software (also known as XON/XOFF). If you need software or both types of handshaking in your system, you can specify it on the command line: C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HSOFTWARE C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HBOTH ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 12. BBS Ads ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The ULP system includes a BBS ad removal feature based on CRC-32 calculation of the file contents and other pertinent data. In this fashion, ULP can detect a known ad file despite changes of the file name and date. In order for sysops to be able to 'keep up' with new ads produced by the weenie sysops who insert the @!&*#%$ things, ULPSM has two maintenance functions that permit the sysop to update the BBS ads database with their own information. First, ULPSM can scan a BBS ad file (or multiple files), and update the BBS ads database with the required information. Don't worry about duplication within the database, as part of the compiling process is to purge duplicate BBS ad data. To add files to the BBS ads database, select menu G (BBS ad processing), and select submenu B (Add new BBS ad to BBS ads database). The online help contains all information that may be necessary. Second, since the latest version of my master BBS ads database is always included in the distribution archive, you don't want to keep changing your database from release to release. Therefore, you can merge the new release database with your existing BBS ads database via ULPSM as well. To merge the distribution database with your own database, select menu G (BBS ad processing), and select submenu C (Merge pre-built BBS ad database). Again, the online help contains all information that may be necessary. Note that ULPSM cannot (will not) put 0-byte bbs adds in its database; this is because every 0-byte file has the same CRC-32: 0. Therefore, inserting 0-byte files into a numerical database is useless and doing so would remove *every* 0-byte file encountered, not just the BBS ads, including subdirectory markers in pathed archives. The exclusion filter list is the best place for 0-byte ads, since the only thing unique to 0-byte files is the filename. I would greatly appreciate your uploading of any new BBS ad files that you may collect over time to my BBS so I can update the master database that I include with the ULP distribution archive. Please refer to the top of this document for my BBS number. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 13. The Future of ULP ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ULP will be supported as long as I'm in the BBSing business (which will be quite a while...once it's in your blood, you can never shake it ). The ULP system will be rapidly expanding it's features so it will be your first choice in BBS upload processors. Some current plans (in no particular order): ù Add the ability to preprocess files prior to file checking them; for example, decompress executables that have been PKLite'd. ù Better support for other BBS software directory listing formats. If you have any other suggestions, or want other archivers supported, please contact me via Email, U.S. snail-mail or on my BBS at the number at the top of this document. Thanks for giving ULP a try! ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Appendix A: DOS Errorlevels ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The following is a partial list of errorlevels returned to the operating system by the ULP and ULPSM programs. Not all errorlevels are documented, since the error messages are much more useful in debugging problems. 0 Successful execution (ULP and ULPSM) 1 Successful execution, nothing to do (ULP event modes) 1 Unknown archive format (ULP online modes) 2 DOS reserved keyword found in archive (ULP online modes) 3 Error unpacking archive (archive integrity) (ULP online modes) 4 Error file checking archive files (virus, etc.) (ULP online modes) 5 Error duplicate checking archive files (ULP online modes) 6 Error packing archive (ULP online modes) 7 Age limit exceeded by archive files (ULP online modes) 8 Encrypted file found in archive files (ULP online modes) 9 TCANned file (ULP online modes) 10 Bad GIF file (ULP online modes) 11 Unacceptable GIF or JPEG resolution (ULP online modes) 12 GIF compressed with GIFLITE (ULP online modes) 13 Unable to create work space (ULP online modes) 99 Help screen (executing a program with no or an insufficient number of arguments) (ULP and ULPSM) >99 Program error (refer to the error message and log file). ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Appendix B: Acknowlegements ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The DOS versions of ULP and ULPSM use the SPAWNO swapping routines by Ralf Brown to minimize memory use while shelling to DOS and running external programs. The problem of automatically recognizing duplicate files on large bulletin board systems, independent of filename, was originally solved by Dr. Frederick W. Kantor (founder of Information Mechanics and author of FWKCS(TM) Contents_Signature System), who came up with the elegant solution of using both the 32_bit CRC and the uncompressed file length together to make a "contents_signature" for each file. Dr. Kantor's experimental data has shown a typical pairwise error rate of less than one part in ten trillion using this technology. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Appendix C: Command Line Summary ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ULP.EXE command-line syntax: ULP -Cd:\path\config.ext -Mmode [-Fd:\path\] [-Dd:\path\desc.ext] [-P#<,#>] [-B#] [-H?] [-1] [-X] [-O] [-L] [-N#] [-G?] [-R] [-T#] [-Q] [-!] -C filename of the ULP configuration file -M processing mode [Batch/Override/Retest/Convert/Upload/Test/Attach] -F filename/subdirectory of the archive(s) to be tested (conditional) -D filename of the upload description file (optional) COM port switches: (optional) -P COM port number [1/2/addr,irq] -L force local mode w/o comm I/O -B DTE baud rate [300-115200] -H handshake [Hardware/Software/Both] -1 disable 16550 FIFO operation -X use FOSSIL driver interface -O use OS/2 SIO API interface Miscellaneous switches: (optional) -N BBS node number -G ANSI graphics toggle [Yes/No] -R retain original archive date -T readability time delay [0-10] -Q quiets beep on error -! enables debugging operation") ULPSM.EXE command-line syntax: ULPSM -Cd:\path\config.cfg [-Ad:\path\] [-U] [-R] [-S] [-P#] [-I] [-T#] [-Q] -C complete path and filename of the configuration file -A file(s) to add to the duplication database (optional) -U forces unpacking of all archives when adding files (optional) -R recurses nested drive subdirectories when adding files (optional) -S compiles, sorts and indexes the duplication database (optional) -P age in months for purging duplication database records (optional) -I initialize process data file (optional) -T sets time delay for display readability (optional) -Q quiets beep when an error is detected (optional)