home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / pcboard / ulp099b.zip / ULP.DOC < prev    next >
Text File  |  1993-05-25  |  84KB  |  1,572 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 0.99ß
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║     (c) Copyright 1992-1993 - Stacy Smith
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.                                 Courtesy of:
  13.  
  14.                         The Bloom Beacon-Picayune BBS
  15.           Node 1: (804) 525-9760 (USRobotics Courier Dual Standard)
  16.              Node 2: (804) 525-5372 (USRobotics Courier V.32bis)
  17.                              FidoNet 1:276/112
  18.                                   Intelec
  19.                              RoseNet (ID: BB-P)
  20.  
  21.                                 Stacy Smith
  22.                               Route 6 Box 189
  23.                            Forest, Virginia 24551
  24.  
  25.  
  26. ┌────────────────────┐
  27. │  1. Introduction:  │
  28. └────────────────────┘
  29.  
  30. This system was born out of a need for a universal upload processor. There are
  31. many alternative systems available, but they are limited to the ZIP format and
  32. perhaps one or two others. Few are able to handle self-extracting archives.
  33. Most are limited in the number of levels of archive nesting allowed in a file
  34. to be tested. All require the use of a third-party duplicate file checking
  35. system if you want to screen your uploads for duplicates.
  36.  
  37. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files
  38. over to the ARJ compression format, due to its superior compression ratio over
  39. PKZip and its features over LHA. I do not intend to debate the merits of one
  40. archive format over another, but due to my decision, the need for a universal
  41. upload processor became apparent, so off I went.
  42.  
  43. While I was at it, I decided to incorporate other technologies, such as
  44. duplicate checking, archive format conversion, information lines, support for
  45. internal description files, etc., into a single package. This software is the
  46. result of my efforts to allow my BBS to handle any archive that my users can
  47. throw at it.
  48.  
  49.  
  50. ┌──────────────────────────────────────────────┐
  51. │  2. Features of the UpLoadProcessor System:  │
  52. └──────────────────────────────────────────────┘
  53.  
  54.       ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, SQZ, ZIP, ZOO and
  55.         GIF files, regardless of their file extensions (ideal for software
  56.         distribution networks, like .SDN files).
  57.       ∙ Identifies and processes ARJ, LZH, PAK, SQZ and ZIP self-extracting
  58.         (SFX) archives.
  59.       ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  60.         prevent hacking by hex-editing. (ARJ and LHA are resistant to these
  61.         type of hacking attempts).
  62.       ∙ Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity
  63.         verification (-AV) stamps, and can be left alone after processing
  64.         (configurable).
  65.       ∙ Detects and processes ARJ and ZIP archives with imbedded paths.
  66.       ∙ Detects and rejects encrypted ARJ and ZIP archives.
  67.       ∙ Selected uncompressed files uploaded can be processed and compressed
  68.         using your default format.
  69.       ∙ Removes known BBS ads from archives; includes a BBS ads maintenance
  70.         utility so sysops can update their BBS ads databases in real time. ULP
  71.         can also insert a BBS ad, if desired.
  72.       ∙ Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct
  73.         archive extension to reflect the conversion process.
  74.       ∙ Allows the use of up to 9 different archiving programs, all user-
  75.         configurable. Any archiving program used that is not listed above will
  76.         be identified using the file extension only, until it's signature is
  77.         determined and incorporated into the program.
  78.       ∙ Uses a recursive processing routine that will allow (theoretically)
  79.         unlimited nested archives (the only limit is imposed by the DOS path).
  80.         This routine has been tested to 5 levels deep as of this writing.
  81.       ∙ Allows the use of up to 3 different file-checking programs, all user-
  82.         configurable, for virus and trojan checking, 3rd party utilities, etc.
  83.       ∙ Allows the use of a GIF file checking program, completely configurable.
  84.       ∙ Rejects GIF files based upon image width, height, colors and
  85.         compression.
  86.       ∙ User-definable disposition (rename or delete) of corrupted, duplicate
  87.         or other archives (not virus-related).
  88.       ∙ User-definable disposition (rename or delete) of virus-infected
  89.         archives.
  90.       ∙ Incorporates it's own CRC-32 duplicate checking system, as well as the
  91.         associated database processing software. No more executing (and
  92.         registering!) third-party duplication-checking software, sacrificing
  93.         speed and memory. This system is extremely fast and it's database is
  94.         much smaller than other systems. Despite it's size, the probability of
  95.         a false duplication is more than 4 trillion to 1! The database is
  96.         self-validating, to quickly determine if a database has been corrupted
  97.         or altered.
  98.       ∙ The duplication determination system uses two filters to determine an
  99.         archive's level of duplication, preventing false rejection by simply
  100.         counting up the number of blatantly duplicate files.
  101.       ∙ Converts all uploads into a default archive format of your choosing,
  102.         or they may be re-archived in their original format (user-defined).
  103.         Nested archives can also be converted to your default format, or
  104.         re-archived using their original format. SFX archives can be archived
  105.         using your default format, or optionally left alone after verification.
  106.       ∙ Can utilize a user-defined time window (in months) for acceptance of
  107.         new upload files, based on the most recent file date in the archive.
  108.       ∙ Changes all archive file attributes to 'read/write' from 'read-only'.
  109.       ∙ Supports the use of private and public upload directories. Moves files
  110.         and upload descriptions from the private directory to the public
  111.         directory. Single directory operation is also available.
  112.       ∙ Honors the '/' identifier in the description marking the file as a
  113.         private upload for the sysop by processing the file, but not making
  114.         it public.
  115.       ∙ Supports the use of DESC.SDI and FILE-ID.DIZ description files in an
  116.         archive, user-configurable, for those not running PCBoard 14.5a+ and
  117.         PCBDESC.
  118.       ∙ Smart word-wrapping word-wraps descriptions or leaves them as entered,
  119.         depending upon the presence of boxes, etc.
  120.       ∙ Can optionally insert an archive or GIF information line in the file
  121.         description that contains various information about the archive or GIF
  122.         files.
  123.       ∙ Two modes of online testing are available: normal mode, which fully
  124.         unpacks the archive and tests each file individually; and fast mode,
  125.         which scans a ZIP or ARJ archive directly for file CRCs and dates, and
  126.         uses the archiving program's internal integrity testing.
  127.       ∙ The online tester will accept a redirected ARJ or PKUNZIP archive
  128.         listing file to pre-verify the duplication and age limits before a user
  129.         uploads the actual archive, saving him wailing and gnashing of teeth.
  130.       ∙ ULPTEST can generate COM port status output to inform the online user
  131.         of the progress of testing. ULPTEST supports IRQ2-7, non-standard
  132.         port addresses and baud rates to 115K in direct mode, and also supports
  133.         FOSSIL drivers. The port information can be defined on the command-line
  134.         or can be read directly from PCBOARD.DAT and PCBOARD.SYS. ULP can also
  135.         be implemented in a "seamless" mode (when registered) to look like a
  136.         part of PCBoard.
  137.       ∙ Import of FWKCS CRC database is supported to ease transition to the ULP
  138.         duplication system. No more rebuilding databases!
  139.       ∙ Archives failed for exceeding duplication limits can be viewed using
  140.         ULPDB (the database program), to allow easy determination of manual
  141.         archive acceptance.
  142.       ∙ User-selectable process logging to a disk file. Two logging modes are
  143.         available: terse and verbose.
  144.       ∙ Written mostly in C (and a little assembler) for optimal speed, using
  145.         Microsoft C 7.0, Borland C++ 3.1 and Turbo Assembler 3.0.
  146.       ∙ Lifetime registration; pay ONCE and your registration number will work
  147.         on all future versions!
  148.  
  149.  
  150. ┌─────────────────────────────────────────────────────┐
  151. │  3. Files Included in the ULP Distribution Archive  │
  152. └─────────────────────────────────────────────────────┘
  153.  
  154.         ULP.EXE         Event upload processing program.
  155.         ULPTEST.EXE     On-line testing program for use in PCBTEST.BAT.
  156.         ULPDB.EXE       CRC-32 database creation and maintenance program.
  157.         ULPCFG.EXE      Configuration program for the ULP system.
  158.         ULPADS.EXE      BBS ads database maintenance program.
  159.         ULPADS.DB       BBS ads database file.
  160.         ULP.CFG         Sample text configuration file for the ULP system.
  161.         EXCLUDE.LST     Sample exclusion list for archivers.
  162.         PCBTEST.BAT     Sample PCBTEST.BAT file for using ULPTEST.
  163.         ULP.DOC         This file.
  164.         HISTORY.TXT     ULP revision history in reverse order.
  165.         ULPBLT          Archive verification bulletin for sysops to post.
  166.         REGISTER.FRM    Registration form for ULP.
  167.         COMMENT.TXT     Sample comment file for inclusion in archive headers.
  168.         FILE_ID.DIZ     Internal description file.
  169.  
  170. When you unzip the distribution archive, you should see my PKZIP authenticity
  171. verification stamp, and a '-AV' after every file in the archive:
  172.  
  173.         # SSU301    The Bloom Beacon-Picayune BBS
  174.  
  175. If there are any files missing or added, or the -AV stamp is missing, the
  176. archive has been tampered with. It would be advisable to call my BBS (listed at
  177. the top of this document) for the latest version of ULP.
  178.  
  179.  
  180. ┌───────────────────────────┐
  181. │  4. Program Requirements  │
  182. └───────────────────────────┘
  183.  
  184. To the best of my knowledge, this program will run on most any machine capable
  185. of running PCBoard 14.5+. My BBS setup is DESQview on a LANtastic network, but
  186. other sysops that I have been in contact with have successfully implemented ULP
  187. on setups with CD-ROMs and other varying hardware and software.
  188.  
  189. ULP has been developed and tested using the following archiving and file
  190. checking software packages:
  191.  
  192.         ARJ 2.10 through 2.39f (by Robert Jung)
  193.         HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  194.         LHA 2.12 and 2.13 (by Haruyasu Yoshizaki)
  195.         LHarc 1.13c (by Haruyasu Yoshizaki)
  196.         PAK 2.51 (by NoGate Consulting)
  197.         PKPAK 3.61 (by PKWare)
  198.         PKZIP 1.10 through 2.04g (by PKWare)
  199.         SQZ 1.08.2 (by Jonas Hammarberg)
  200.         ZOO 2.01 through 2.10 (by Rahul Deshi)
  201.         SCAN V82 through V104 (by McAfee Associates)
  202.         GIFTEST 4.0 Beta 10 through Beta 14 (by Dave Navarro)
  203.  
  204. The ULP system requires DOS 3.x or later, as it uses DOS SHARE-compatible file
  205. reads and writes, and can use the DOS PATH to find the archiving and other
  206. utilities.
  207.  
  208. ULP's memory requirements are relatively small (about 80K or so, plus the disk
  209. buffer allocated), but all programs are spawned or shelled, which reduces the
  210. free memory for the program being executed. It would be a good idea to have as
  211. much free conventional memory as possible (ULP itself cannot use EMS or XMS
  212. memory), especially if you use the ARJ compression system, which requires in
  213. the neighborhood of 280K itself to run.
  214.  
  215. ULPDB also should have as much conventional memory as can be afforded, as it
  216. performs its sort in memory for optimal speed; it may use from 128K to 576K of
  217. memory depending upon the operation being performed. If your duplication
  218. database is larger than 500K (over 50,000 file entries), ULPDB may utilize a
  219. segmented sort algorithm, which is slower but capable of completely compiling a
  220. database up to 8MB in size (over 800,000 file entries)! The memory sort will
  221. probably be fine for many systems, as 50,000 files would probably average out
  222. to be about 4,000 to 5,000 typical archives.
  223.  
  224. Obviously, the 286+ and 386+ versions of these programs that is available to
  225. registered users will not run on a 8088, 8086 or 80186 (huh?) based computer.
  226. So don't try it (I haven't, so I don't have a clue what will happen...probably
  227. spontaneous combustion...).
  228.  
  229.  
  230. ┌───────────────────┐
  231. │  5. Registration  │
  232. └───────────────────┘
  233.  
  234. The ULP system is not free; nor is ULP is crippled to force registration. ULP
  235. is fully functional, and will always remain so. The only variation with the
  236. registered copies is no time delay and beg message.
  237.  
  238. Why register? Besides a clean conscience, you will get a registration code that
  239. will work for all future versions of ULP, and will remove the delay and message
  240. at the end of execution of each program. In addition, registration will allow
  241. you to run ULPTEST in a "seamless" mode so that it looks like a part of
  242. PCBoard to the user.
  243.  
  244. In addition, the registation code will allow use of the 286 or 386 specific
  245. versions of ULP that are made available only to registered users of ULP. These
  246. versions are slightly smaller and faster than the shareware 086+ version.
  247.  
  248. The registration fee for your unique code is $20 for non-commercial BBSes. The
  249. registration fee for commercial BBSes, defined as running your BBS in the
  250. course of a commercial business or for profit, is $40. Other variations are
  251. available; refer to the file REGISTER.FRM for all registration options. Please
  252. print the file REGISTER.FRM and fill it out. You can print out the form by
  253. issuing the following command from the DOS prompt:
  254.  
  255.         TYPE REGISTER.FRM > PRN
  256.  
  257.  
  258. ┌───────────────────────────────────────┐
  259. │  6. License, Warranty and Disclaimer  │
  260. └───────────────────────────────────────┘
  261.  
  262. I'll keep this part short and sweet, and dispense with the legal-ese:
  263.  
  264.         License: You are allowed to use ULP for 30 days, after which you must
  265.            either register ULP or stop using it completely. ULP registration is
  266.            a license for your use of ULP; I retain ownership of the software. A
  267.            single registration applies to a single BBS system, regardless of
  268.            the number of computers used in the system. If you run two or more
  269.            distinct BBS systems on the same computer or network (with different
  270.            names), you require two or more ULP registrations. Refer to the
  271.            registration form for the currect pricing structure.
  272.  
  273.         Warranty: There isn't one. The only thing I'll guarantee is that ULP
  274.            will take up disk space, and will disappear when deleted.
  275.  
  276.         Disclaimer: I'm not responsible for anything bad that happens. ULP
  277.            works here, but I cannot be held responsible for it not working on
  278.            your computer or doing any damage to hardware or software.
  279.  
  280. If these aren't agreeable with you, then the best thing to do is delete ULP
  281. right now. I'll do my best to help any user (registered or not) that wants to
  282. use ULP, and I'll act on bug reports quickly, but I simply cannot and will not
  283. be responsible for anything bad, like lost data, disk crashes, or whatever
  284. else you can think of.
  285.  
  286.  
  287. ┌──────────────────────────────┐
  288. │  7. Principles of Operation  │
  289. └──────────────────────────────┘
  290.  
  291. Since the ULP system is made up of several inter-operating programs, this
  292. overview and concept explanation should help you understand how ULP is
  293. designed to be used.
  294.  
  295. *******************************************************************************
  296.      READ THIS SECTION VERY CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  297. *******************************************************************************
  298.  
  299. I believe that all responsible BBS sysops verify all of their uploads prior to
  300. posting them, in order to protect both themselves and their users. ULP is
  301. designed with idea in mind. Most, if not all, sysops process uploads in one of
  302. two ways (listed with benefits and liabilities as I see them):
  303.  
  304.         1) Make all uploads private, processing them during a system event.
  305.  
  306.            BENEFITS:
  307.               ∙ Takes up very little on-line time on the user's part to
  308.                 process archives.
  309.               ∙ Allows the conversion of all archives to a default format,
  310.                 so that the BBS archives are consistent.
  311.               ∙ Allows the BBS to accept any archive format...face it, it's
  312.                 hard enough to get some of these weenies to upload, much
  313.                 less compress them the same way.
  314.  
  315.            LIABILITIES:
  316.               ∙ Files are not available immediately for download.
  317.               ∙ The 'U' subcommand of PCBoard's (F)ile Directories command
  318.                 is no longer available to the user.
  319.               ∙ Does not catch duplicates or aged archives until after the
  320.                 user has uploaded them, and perhaps leads to abuse by
  321.                 clever (?) users. (It is assumed that these sysops still
  322.                 use the venerable 'PKUNZIP -T' in their PCBTEST.BAT...)
  323.  
  324.         2) Process (test) each upload online after the user uploads them, and
  325.            making them available for immediate download.
  326.  
  327.            BENEFITS:
  328.               ∙ Catches duplicate, defective and aged archives while the
  329.                 user is online, denying him upload credits.
  330.               ∙ Files are available immediately for download if they are not
  331.                 made private in the PCBoard setup.
  332.  
  333.            LIABILITIES:
  334.               ∙ Takes up on-line time for a user, potentially adding to his
  335.                 long-distance phone bill, discouraging further uploading;
  336.                 this process is typically quite slow for large archives.
  337.               ∙ The archive format cannot be converted (a limitation of
  338.                 PCBoard), leaving many different archive formats in your
  339.                 BBS directories. Because of this, many sysops force users
  340.                 to use a specific format, which may or may not be consistent
  341.                 with other BBS's the user calls.
  342.  
  343. The ULP system takes the best of both of these methods of testing. ULP.EXE is
  344. an event-mode processor which will fully process every new archive found in the
  345. source upload directory, including archive format conversion, and optionally
  346. move the file and description to a destination directory. In the simplest
  347. ULP system setup, you MUST run ULP.EXE in your event to completely process all
  348. uploads to your system.
  349.  
  350. ULPTEST.EXE is an on-line processor, with a twist: it doesn't recompress the
  351. archive. It does little more than thoroughly test the upload; this will greatly
  352. reduce the amount of on-line time the user is forced to waste waiting for file
  353. processing. The conversion process is handled by ULP during the system event.
  354.  
  355. Pay attention to this part:
  356.  
  357. PCBoard normally has two upload directories for each conference: a private and
  358. a public directory. When PCBoard invokes PCBTEST.BAT, the upload is in the
  359. private directory. If the archive fails the testing, it will remain there.
  360. However, if it passes, one of two things will occur depending upon your system
  361. setup; if you have made all uploads private, the file will remain in the
  362. private directory; if you have not made uploads private, it will be moved BY
  363. PCBOARD (not ULPTEST) to the public directory.
  364.  
  365. If you have made all uploads private, then setup and configuration of ULP is a
  366. snap: the source directory is the private upload directory, and the destination
  367. is the public directory. However, if you want to allow users access to untested
  368. uploads, then your source directory is the public upload directory, and the
  369. destination information is left blank. To illustrate the operation:
  370.  
  371.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  372.   ───────────────────────────────────┼─────────────────────────────────────
  373.   2 directories:  C:\PRIVATE         │  2 directories:  C:\PRIVATE
  374.                   C:\PUBLIC          │                  C:\PUBLIC
  375.                                      │
  376.   User uploads a file, gets placed   │  User uploads a file, gets placed
  377.   in C:\PRIVATE by PCBoard           │  in C:\PRIVATE by PCBoard
  378.                                      │
  379.   ULPTEST.EXE tests it               │  ULPTEST.EXE tests it
  380.                                      │
  381.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  382.                                      │  C:\PUBLIC; if it fails, PCBoard
  383.                                      │  leaves it in C:\PRIVATE
  384.                                      │
  385.   ULP.EXE processes all new uploads  │  ULP.EXE processes all *new* uploads
  386.   found in C:\PRIVATE since last     │  found in C:\PUBLIC since last event
  387.   event and moves all good uploads   │
  388.   to C:\PUBLIC                       │
  389.  
  390. The following are PCBSETUP (14.5a) screen snapshots of what the Main Conference
  391. should look like when implemented as described above:
  392.  
  393. MAKE ALL UPLOADS PRIVATE:
  394. ╔═════════════════════════════════════════════════════════════════════════════╗
  395. ║                          Main Board Configuration                           ║
  396. ║                                                                             ║
  397. ║ Make All Uploads  Private : Y                                               ║
  398. ║ Make All Messages Private : N                                               ║
  399. ║                                                                             ║
  400. ║ Number of Message Blocks  :  2                                              ║
  401. ║ Name/Loc of MSGS File     : C:\PCB\MAIN\MSGS                                ║
  402. ║                                                                             ║
  403. ║ Name/Loc of Users Menu    : C:\PCB\GEN\BRDM                                 ║
  404. ║ Name/Loc of Sysops Menu   : C:\PCB\GEN\BRDS                                 ║
  405. ║ Name/Loc of NEWS File     : C:\PCB\GEN\NEWS                                 ║
  406. ║                                                                             ║
  407. ║              Sort   Name/Loc Upload DIR File       Location of Uploads      ║
  408. ║ Public  Upld: 0   :                              :                          ║
  409. ║ Private Upld: 2   : C:\PCB\GEN\PRIVDIR           : C:\PRIVATE\              ║
  410. ║                                                                             ║
  411. ║               Menu Listing                     Path/Name List File          ║
  412. ║ Doors       : C:\DOORS\DOORS               : C:\DOORS\DOORS.LST             ║
  413. ║ Bulletins   : C:\PCB\GEN\BLT               : C:\PCB\GEN\BLT.LST             ║
  414. ║ Scripts     :                              :                                ║
  415. ║ Directories : C:\PCB\GEN\DLFILES           : C:\PCB\GEN\DLFILES.LST         ║
  416. ║ Download Paths (listing only)              : C:\PCB\GEN\DLPATH.LST          ║
  417. ║                                                                             ║
  418. ╚══ 10:13:03 ═══ 09-30-92 ═════ F1 ═ help ════ caps: OFF  num: OFF  ins: OFF ═╝
  419.  
  420. MAKE ALL UPLOADS AVAILABLE IMMEDIATELY AFTER TESTING:
  421. ╔═════════════════════════════════════════════════════════════════════════════╗
  422. ║                          Main Board Configuration                           ║
  423. ║                                                                             ║
  424. ║ Make All Uploads  Private : N                                               ║
  425. ║ Make All Messages Private : N                                               ║
  426. ║                                                                             ║
  427. ║ Number of Message Blocks  :  2                                              ║
  428. ║ Name/Loc of MSGS File     : C:\PCB\MAIN\MSGS                                ║
  429. ║                                                                             ║
  430. ║ Name/Loc of Users Menu    : C:\PCB\GEN\BRDM                                 ║
  431. ║ Name/Loc of Sysops Menu   : C:\PCB\GEN\BRDS                                 ║
  432. ║ Name/Loc of NEWS File     : C:\PCB\GEN\NEWS                                 ║
  433. ║                                                                             ║
  434. ║              Sort   Name/Loc Upload DIR File       Location of Uploads      ║
  435. ║ Public  Upld: 2   : C:\PCB\GEN\PUBLDIR           : C:\PUBLIC\               ║
  436. ║ Private Upld: 2   : C:\PCB\GEN\PRIVDIR           : C:\PRIVATE\              ║
  437. ║                                                                             ║
  438. ║               Menu Listing                     Path/Name List File          ║
  439. ║ Doors       : C:\DOORS\DOORS               : C:\DOORS\DOORS.LST             ║
  440. ║ Bulletins   : C:\PCB\GEN\BLT               : C:\PCB\GEN\BLT.LST             ║
  441. ║ Scripts     :                              :                                ║
  442. ║ Directories : C:\PCB\GEN\DLFILES           : C:\PCB\GEN\DLFILES.LST         ║
  443. ║ Download Paths (listing only)              : C:\PCB\GEN\DLPATH.LST          ║
  444. ║                                                                             ║
  445. ╚══ 10:13:03 ═══ 09-30-92 ═════ F1 ═ help ════ caps: OFF  num: OFF  ins: OFF ═╝
  446.  
  447. ULPTEST.EXE also has two modes of operation: normal and fast. The normal mode
  448. decompresses the files, performs file, duplication and age checking, and then
  449. deletes the extracted files and returns to PCBoard, informing PCBoard of the
  450. test results. Fast mode DOES NOT decompress the file; it firsts performs an
  451. archive integrity check, then scans ARJ and ZIP archives directly for duplicate
  452. and age information, and then returns to PCBoard (if the archive is not ARJ or
  453. ZIP, then normal mode is forced). In fast mode, file checking (viruses, etc.)
  454. is left for ULP to do (which is why the above discussion regarding
  455. private/public directories is important).
  456.  
  457. ULPTEST.EXE will also accept a redirected ARJ or PKUNZIP listing text file with
  458. the special name VERIFY.ULP as input to pre-verify an upload for a user, before
  459. the user actually spends his time uploading the file only to find out it won't
  460. pass the limits you set.
  461.  
  462.  
  463. ┌───────────────────┐
  464. │  8. Installation  │
  465. └───────────────────┘
  466.  
  467. GENERAL (REQUIRED!):
  468. ───────────────────
  469. Make a subdirectory on your hard drive. For the purposes of this document,
  470. we'll call it "C:\ULP". Unarchive the ULP distribution archive into this
  471. subdirectory. You've more than likely already made it this far, if you're
  472. reading this file. <g>
  473.  
  474. The ULP system opens several files at once for various reasons. I would
  475. recommend that you have a minimum of FILES=30 per node in your system
  476. CONFIG.SYS file, since ULPTEST is run in conjunction with PCBoard.
  477.  
  478. If you are running PCBoard under a network or a multitasking operating system,
  479. you should already have DOS's SHARE.EXE loaded. You must have SHARE loaded in
  480. order to take advantage of the file sharing and locking methods used by the ULP
  481. programs to prevent data loss. (If you are running a single-node system without
  482. a multitasker, SHARE is not needed).
  483.  
  484. Edit the configuration file to suit your needs. Proper configuration will
  485. require you to refer to this section, the previous section and the section
  486. titled "Configuration", which has an in-depth explanation of each configuration
  487. parameter and its function. It would probably be wise to fire up your printer
  488. for this document.
  489.  
  490. For this document, we'll assume the name of your text configuration file is
  491. "ULP.CFG". After editing the configuration file, generate the binary version
  492. (called "ULP.BIN" in this document) using the ULPCFG.EXE program as follows:
  493.  
  494.     ULPCFG -TULP.CFG -CULP.BIN
  495.  
  496. Note that for any of the ULP programs, you can obtain a limited program syntax
  497. screen simply by executing the program with no arguments.
  498.  
  499. FOR EVENT-MODE UPLOAD PROCESSING (REQUIRED!):
  500. ────────────────────────────────────────────
  501. As a minimum setup, you MUST run ULP as an event-mode processor, as ULP.EXE
  502. handles all of the CRC database updating, archive conversion, file and
  503. description moving, archive information line computation, and other features.
  504.  
  505. Further, ULP requires that you define the upload disk directories and upload
  506. DIRxx files. They can be either a private/public setup or public setup, as
  507. described below (and in the 'principles of operation'section):
  508.  
  509.       - PRIVATE/PUBLIC SETUP:  This setup will not allow users to get to any
  510.         archive that has not been fully processed. In PCBSETUP, under Main
  511.         Board Configuration (and any other conferences you want ULP to
  512.         process), make all uploads private. Define a private upload
  513.         directory and a private DIRxx file (which should have already been
  514.         done, since all sysop-only uploads are placed here by PCBoard). Also
  515.         create a public upload directory and public DIRxx file, and add it into
  516.         the DLPATH files. This is how I have my system setup.
  517.  
  518.       - PUBLIC SETUP:  This setup will allow users to download archives from
  519.         the public upload directory, including partially testing archives. In
  520.         PCBSETUP, under Main Board Configuration (and any other conferences you
  521.         want ULP to process), define a private upload directory and a private
  522.         DIRxx file, and a public upload directory and a public DIRxx file (this
  523.         is where PCBoard will place all new non-private uploads since you did
  524.         not make them private).
  525.  
  526. To process your uploads during your system event, add the following lines to
  527. your EVENT.SYS file (be sure to change the drive and path as necessary):
  528.  
  529.         C:
  530.         CD \ULP
  531.         ULP -CULP.BIN
  532.  
  533. ULP will lock the duplication database, preventing any other program from
  534. accessing them (ULPTEST and ULPDB, specifically). Therefore, I strongly suggest
  535. you have all nodes down when running ULP.
  536.  
  537. Once you have ULP configured, before you run ULP for the first time, the
  538. process data file must be initialized using the -I parameter. The syntax is as
  539. follows, but please refer to the manual operation section below for more
  540. information:
  541.  
  542.         ULP -CULP.BIN -I
  543.  
  544. This is only done ONCE, and never needs to be done again; ULP maintains this
  545. file as a course of action during normal operation.
  546.  
  547. FOR THE INTEGRATED CRC-32 DUPLICATION CHECKER (HIGHLY RECOMMENDED):
  548. ───────────────────────────────────────────────────────────────────
  549. Initially, you must create the CRC database from scratch. If you have mostly
  550. ZIP and ARJ files, then this should be very quick (on the order of 10 minutes
  551. per 1000 archives for my 10MHz AT clone on a hard disk; a CD-ROM will be
  552. somewhat slower). After you edit the configuration file, go to the ULP
  553. directory and this command will create and compile your database of your
  554. current downloadable file base:
  555.  
  556.         ULPDB -CULP.BIN -A@C:\PCB\GEN\DLPATH.LST -S
  557.  
  558. The '@' symbol (a '!' may also be used) indicates to ULPDB that the argument is
  559. a list file, not a directory. The list file must have one path per line, and
  560. each path must end with a trailing backslash. In general, you may simply use
  561. your PCBoard DLPATH.LST file, unless you index your downloads.
  562.  
  563. If you would like to include any off-line files in your CRC database (or have
  564. to add files originally not included in the database) you can temporarily copy
  565. your offline files to a temp directory (for the sake of argumentation, let's
  566. call it "C:\TEMP\"; note the trailing backslash). You can then add and compile
  567. them into the CRC database with the following command (no list symbol!):
  568.  
  569.         ULPDB -CULP.BIN -AC:\TEMP\ -S
  570.  
  571. After you've added the offline files, just delete them from the disk, and if
  572. someone uploads a file that you already have, it will be rejected.
  573.  
  574. * NOTE: The default method of database generation will be the fastest mode
  575.         since ULPDB will scan ARJ and ZIP archives for CRCs without unpacking.
  576.         This is not as accurate as recursively unpacking the archives since
  577.         ULPDB can only 'see' one level deep into an archive; nested information
  578.         will not be obtained. If this poses a problem, add the -U parameter to
  579.         the end of the command lines above; this will force ULPDB to unpack all
  580.         archives and compute the CRCs. This will be significantly slower than
  581.         the default method, but 100% accurate.
  582.  
  583. If you already have a FWKCS duplication database, you can import and translate
  584. it into the ULP database by using the -I command line parameter. ULPDB will
  585. prompt you for which database format it is, and will then proceed to import it
  586. into the ULP database defined in ULP.BIN:
  587.  
  588.         ULPDB -CULP.BIN -IC:\FWKCS\CSLIST -S
  589.  
  590. Once you have your database built, you should also perform maintenance on the
  591. duplication database files regularly. This will compile any new data from the
  592. day's uploads into the main database, and remove any added temporary data from
  593. ULPTEST. This is not required to be done every day, but it will speed the
  594. duplicate checking in ULP and ULPTEST. To perform database maintenance, add the
  595. following line to your PCBoard EVENT.SYS after the event-mode processor has
  596. run:
  597.  
  598.         C:                    ──────┐        These lines are repeated
  599.         CD \ULP                     ├─────   for clarity.
  600.         ULP -CULP.BIN         ──────┘
  601.         ULPDB -CULP.BIN -S
  602.  
  603. ULPDB also locks the CRC-32 database, preventing any other program from
  604. accessing them. I strongly suggest you have all nodes down when running ULP.
  605.  
  606. IF YOU USE PCBOARD'S 'TESTFILE.EXE' UTILITY:
  607. ────────────────────────────────────────────
  608. * NOTE: If you are unfamiliar with the operation of PCBTEST.BAT, you will need
  609.         to refer to the PCBoard manual for an explanation of PCBTEST.BAT and
  610.         TESTFILE.EXE.
  611.  
  612. In general, the use of TESTFILE.EXE is not necessary with ULPTEST. ULPTEST is
  613. fully capable of handling most any situation that arises. However, if you must
  614. use TESTFILE.EXE for some reason, in order to take advantage of the upload
  615. pre-verification abilities of ULPTEST, you must add the extension 'ULP' to the
  616. TESTFILE.EXE extension list. This will allow the file 'VERIFY.ULP' to pass
  617. through the filter created by TESTFILE so that ULPTEST may scan it. You will
  618. also have to add 'EXE' to your extension list if you use TESTFILE.EXE, to allow
  619. SFX archives to be processed by ULPTEST.
  620.  
  621. FOR THE ONLINE UPLOAD TESTING (OPTIONAL):
  622. ─────────────────────────────────────────
  623. Online testing of archives can greatly reduce the amount of garbage your BBS
  624. can pick up from user's uploading defective archives, ancient files, and
  625. duplicates. The theory that ULPTEST uses is to simply check the archive AS
  626. FAST AS IT CAN for archive integrity, duplication, and age, and then return
  627. the user to greater and better things. ULP.EXE will handle everything else
  628. during the system event.
  629.  
  630. * NOTE: In order to use ULPTEST, you must set PCBoard to swap by adding the
  631.         /SWAP switch to the SET PCB= environment variable in BOARD.BAT (in
  632.         PCBoard 15.0, this is in PCBSETUP, not the environment variable).
  633.         Otherwise, there will not be enough memory for ULPTEST to execute
  634.         programs like ARJ, SCAN, etc.
  635.  
  636. To use ULPTEST.EXE for on-line testing of archives, use the following command
  637. line in PCBTEST.BAT (refer to the sample PCBTEST.BAT included in the ULP
  638. distribution archive, and the PCBoard manual, to get the general logic of
  639. PCBTEST.BAT's operation). Note the explicit paths to the ULPTEST executable and
  640. the ULP configuration file:
  641.  
  642.         C:\ULP\ULPTEST -CC:\ULP\ULP.BIN -F%1 -M%2 -D%3
  643.  
  644. ULPTEST will garner any other information that is required for operation from
  645. the PCBOARD.DAT and PCBOARD.SYS files. In most installations, ULPTEST will
  646. locate these two system files via the environment variables PCBDAT, PCBDRIVE
  647. and PCBDIR. If the environment variables are used, PCBDIR and PCBDAT are
  648. required; PCBDRIVE is required only if the BBS drop files exist on a different
  649. drive than PCBTEST.BAT is being executed from.
  650.  
  651. * NOTE: Don't rely on PCBoard to create these variables; it only does so prior
  652.         to executing a door. As a last resort, ULPTEST will look in the current
  653.         directory for the files it requires.
  654.  
  655. If you have the environment variables disabled in PCBoard (using the /NOENV
  656. switch), you can define the location of these files by adding the -P parameter:
  657.  
  658.         C:\ULP\ULPTEST -CC:\ULP\ULP.BIN -F%1 -M%2 -D%3 -PC:\PCB\NODE1\
  659.  
  660. Or, or you can provide the port and node number information directly to ULPTEST
  661. by using the -N, -I, -A and -B command switches:
  662.  
  663.         C:\ULP\ULPTEST -CC:\ULP\ULP.BIN -F%1 -M%2 -D%3 -N5 -I4 -A3F8 -B38400
  664.  
  665. where -N is the node number, -I is the port IRQ line, -A is the port base
  666. address (in hex) and -B is the baud rate of the port. If you are using the
  667. DSZPORT environment variable to define the port IRQ and address to DSZ, ULPTEST
  668. will use this information as well.
  669.  
  670. In addition, regardless of the method used to inform ULPTEST of the port
  671. information, ULPTEST defaults to using hardware handshaking. If you want to use
  672. software (XON/XOFF) handshaking or both, use the -H command switch with either
  673. HARDWARE, SOFTWARE or BOTH as the argument:
  674.  
  675.         C:\ULP\ULPTEST -CC:\ULP\ULP.BIN -F%1 -M%2 -D%3 -Hboth
  676.  
  677. ULPTEST is also capable of using a FOSSIL driver, and automatically detects if
  678. you are running PCBoard /M and uses the appropriate FOSSIL port. However, if
  679. you wish to force ULPTEST to use a FOSSIL driver (for example, to access high
  680. IRQs), use the -X command switch with the FOSSIL port number as the argument:
  681.  
  682.         C:\ULP\ULPTEST -CC:\ULP\ULP.BIN -F%1 -M%2 -D%3 -X1
  683.  
  684. During the course of testing, ULPTEST will output the current testing status to
  685. the user online. Note that this information is not displayed locally; it is
  686. being transmitted to the online user only. The program header can be disabled
  687. in registered versions of ULP, making ULPTEST seamless to look like a part of
  688. PCBoard itself. A sample follows:
  689.  
  690.     Verifying FILENAME.ZIP...
  691.     ┌────────────────────────────────┐
  692.     │      UpLoadProcessor 1.23      │  Registered to: Bloom Beacon-Picayune
  693.     │ Copyright 1992-93  Stacy Smith │  Serial number: 1000
  694.     └────────────────────────────────┘
  695.        Identifying file archive format...ZIP
  696.        Screening archive for corruption...OK
  697.        Unpacking archive...OK
  698.        Testing files for viruses, etc...OK
  699.        Checking for duplicate files...OK
  700.        Checking average age of files...OK
  701.        Archive passed.
  702.  
  703. ULPTEST will return a DOS errorlevel of 0 if the archive is OK, and an
  704. errorlevel of 1-12 if there was an error (depending on the error). This allows
  705. the PCBTEST.BAT batch file to branch based upon the results of the ULPTEST. The
  706. appendix to this document lists all of the DOS errorlevels set by various ULP
  707. programs.
  708.  
  709. ULPTEST also creates the requires PCBPASS.TXT and PCBFAIL.TXT for PCBoard to
  710. determine if the archive passed or not.
  711.  
  712.  
  713. ┌────────────────────┐
  714. │  9. Configuration  │
  715. └────────────────────┘
  716.  
  717. The sample configuration file included in the distribution archive is heavily
  718. commented, but some additional information is provided below:
  719.  
  720. GENERAL PARAMETERS:
  721. ───────────────────
  722. REG_CODE
  723.     The registration code EXACTLY as provided to you on your registration
  724.     letter. If this is an unregistered version, comment out this line. Note
  725.     that this is case-sensitive, as the serial number, BBS name and sysop name
  726.     are all encrypted into this code.
  727.  
  728. BBS_NAME
  729.     The BBS name EXACTLY as provided to you on your registration letter. If
  730.     this is an unregistered version, comment out this lines. Note that this is
  731.     case-sensitive!
  732.  
  733. SYSOP_NAME
  734.     The sysop name EXACTLY as provided to you on your registration letter. If
  735.     this is an unregistered version, comment out this line. You get the picture
  736.     by now...
  737.  
  738. SWAP
  739.     If you wish the ULP programs to swap themselves out of memory prior to
  740.     executing external programs, set this parameter to YES. The ULP programs
  741.     will attempt to swap to EMS, XMS and lastly, the hard disk. If you do not
  742.     want this feature, enter NO or comment the line out. This feature will be
  743.     of most benefit to users using ARJ to compress archives, networked systems
  744.     and small DESQview windows. Use this feature ONLY if you have a memory
  745.     crunch!
  746.  
  747. INTERNAL_DEL
  748.     If you wish the ULP programs to delete the extracted files themselves,
  749.     versus using DOS, set this parameter to YES. If not, enter NO or comment
  750.     the line out. In some cases, letting DOS do the work is faster, but foreign
  751.     language implementations of DOS may prevent this ability.
  752.  
  753. DISK_BUFFER
  754.     The size of the disk I/O buffer you wish to allocate in bytes (valid values
  755.     are between 2048 bytes and 16384 bytes). Optimal performance is obtained
  756.     with a value that is a multiple of 2048 bytes, since this is the size of a
  757.     typical hard disk cluster. 4096 seems to be a good number for me, although
  758.     a larger size will improve performance somewhat. If you find yourself
  759.     running out of memory when executing archivers or file checking programs,
  760.     reduce this number to increase your available memory. If no value is
  761.     specified, the disk buffer will default to 4096 bytes.
  762.  
  763. LOG_FILE
  764.     All of the ULP programs will write process and error information to a log
  765.     file, if desired. This is the path/filename of the log file for ULP to
  766.     record its activities. Comment out if you don't want any disk logging.
  767.  
  768. LOG_MODE
  769.     If you want ULP and ULPTEST to record their statistics and finding for each
  770.     archive processed to the log file, use the VERBOSE keyword. If you only
  771.     want errors and summary statistics logged to disk, use the TERSE keyword or
  772.     comment the line out. VERBOSE mode will quickly produce a large log file,
  773.     but gives much insight into what ULP is doing and why a particular upload
  774.     failed.
  775.  
  776. DIR_CFG_FILE
  777.     The path/filename of the upload directory configuration file for ULP. This
  778.     file is automatically created by ULPCFG.EXE from data contained within the
  779.     ULP.CFG text file, and must be defined for ULP to operate.
  780.  
  781. PROC_DAT_FILE
  782.     The path/filename of the ULP process data file. This file contains
  783.     information on previous ULP archive processing and is maintained
  784.     automatically by ULP. This file must exist, or ULP will not operate; to
  785.     intitialize the process data file, use the -I command line switch in
  786.     ULP.EXE.
  787.  
  788. WORK_DIR
  789.     If you want ULP, ULPTEST or ULPDB to use a specific directory for storage
  790.     while processing, enter the full pathname (including the trailing
  791.     backslash). The drive letter MUST be included. If this directory does not
  792.     exist at runtime, the ULP programs will attempt to create it. This can be
  793.     set to a RAM disk for greater speed. If you do not desire to use a specific
  794.     directory, comment it out (ULPDB will extract at its current location on
  795.     disk). If a RAM disk is used (which will greatly speed processing), be sure
  796.     that largest expected archives will fit on the RAM disk decompressed. If an
  797.     archive will not fit onto a RAM disk, ULPDB will flag it as a bad archive
  798.     in the log file and not record its CRCs.
  799.  
  800. ERR_DISP
  801.     This defines how ULP dispositions archives found to have an error other
  802.     than a file check failure. These kind of errors take the form of ZIP CRCs,
  803.     etc., and are not potentially system damaging. Under some conditions, these
  804.     archives can be restored. If you want ULP to delete the archive and
  805.     description, enter DELETE; if you want ULP to rename the archive to a .ERR
  806.     extension, type RENAME or comment the line out.
  807.  
  808. VIRUS_DISP
  809.     This defines how ULP dispositions archives that fail a file check, such as
  810.     a virus scan. These errors are (obviously) potentially system-damaging. (I
  811.     wouldn't keep them if I were you.) If you want ULP to delete the archive
  812.     and description, type DELETE; if you want ULP to rename the archive to a
  813.     .CHK extension, type RENAME or comment the line out.
  814.  
  815. VIEWER
  816.     The command line for an ASCII file viewing (or editing) utility, such as
  817.     Vernon Buerg's venerable LIST utility. This will be called by ULPDB to
  818.     facilitate viewing of an archive information file generated for the
  819.     purposes of archive review. Place the @FILES@ variable where the filename
  820.     is to be entered on the utility's command line.
  821.  
  822. UPLOAD DIRECTORIES:
  823. ───────────────────
  824. DIR_CFG_FILE
  825.     The path/filename of the upload directory configuration file for ULP. This
  826.     file is automatically created by ULPCFG.EXE from data contained within the
  827.     ULP.CFG text file, and must be defined for ULP to operate.
  828.  
  829. Each pair of upload directories (one source, and one destination), is denoted
  830. by UL_DIR x, where x is a sequential number. An unlimited number of directory
  831. pairs can be processed by ULP. The next 5 keywords are REQUIRED after the
  832. UL_DIR statement; do not comment any of them out or insert other parameters or
  833. comments in between them:
  834.         UL_DIR      = denotes the beginning of a pair of upload directories
  835.                       definition.
  836.         SOURCE_PATH = the directory where the uploads are placed by PCBoard.
  837.                       This must include the trailing backslash! NOTE: if you
  838.                       are using the 2 public directory setup, this parameter
  839.                       will be the INITIAL public upload directory; the same
  840.                       goes for the next two parameters).
  841.         SOURCE_LIST = the source upload directory list file that contains the
  842.                       archive descriptions, including the path.
  843.         SOURCE_HDR  = the number of lines to ignore at the beginning of the
  844.                       source upload directory list file (for headers,
  845.                       detachable header filespecs, etc.)
  846.         DEST_PATH   = the destination directory where the uploads can be placed
  847.                       by ULP after successful processing. This must include the
  848.                       trailing backslash! (Leave blank if all uploads are
  849.                       public).
  850.         DEST_LIST   = the upload directory list file that contains the archive
  851.                       descriptions, including the path. ULP will append this
  852.                       file with the descriptions of successfully processed and
  853.                       move archives. (Leave blank if all uploads are public).
  854. For example, if you want all uploads to be private, you would define the
  855. upload directory as (noting that the SOURCE_HDR should be set to the
  856. appropriate value):
  857.         UL_DIR       1
  858.         SOURCE_PATH  c:\private\
  859.         SOURCE_LIST  c:\pcb\gen\privdir
  860.         SOURCE_HDR   1
  861.         DEST_PATH    c:\public\
  862.         DEST_LIST    c:\pcb\gen\publdir
  863. If you want all uploads to be public, you would define it as:
  864.         UL_DIR       1
  865.         SOURCE_PATH  c:\public\
  866.         SOURCE_LIST  c:\pcb\gen\publdir
  867.         SOURCE_HDR   1
  868.         DEST_PATH
  869.         DEST_LIST
  870.  
  871. AGE-LIMIT CHECKING:
  872. ───────────────────
  873. AGE_CHK
  874.     If you want ULP to fail an archive based on the average age of the files
  875.     contained within, enter YES; otherwise, enter NO or comment out the line.
  876.  
  877. AGE_LIMIT
  878.     The maximum average age in months, that you will accept for an upload. (If
  879.     the ERR_DISP is set to RENAME, it will be renamed to a .ERR extension).
  880.  
  881. ARCHIVING CONTROL FLAGS:
  882. ────────────────────────
  883. ARC_CVT
  884.     If you want ULP to convert the archive to a default archiving format of
  885.     your choice, type YES; if not, type NO or comment the line out. This only
  886.     affects the 'outside' level of the archive. This flag has no affect on the
  887.     conversion of internal, nested archives.
  888.  
  889. ARC_NEST_CVT
  890.     If you want ULP to convert any internal archives found inside the archive
  891.     to your default archiving format, type YES; if not, type NO or comment the
  892.     line out, and they will be rearchived using the original archiving method
  893.     (using the original extension, even if it isn't that archiver's default
  894.     extension). The benefit of converting archives is it may save some disk
  895.     space; on the down side, it will potentially hose automatic installation
  896.     programs/batch files that may be contained within the archive.
  897.  
  898. SFX_CVT
  899.     If you want ULP to convert a self-extracting (SFX) archive to your default
  900.     archiving format, type YES; if not, type NO or comment the line out. If NO
  901.     is selected, then the archive will be processed, and then left alone if it
  902.     passes (NOT re-archived!). The reasoning for this is the LHA autostart
  903.     batch files and other similar features; they are usually used for novice
  904.     users and for automatic installation. By converting SFX archives, this may
  905.     save some disk space, but can cause inconveniences. For example, if you
  906.     don't have PKZ110.EXE on your BBS, a novice user has no way of obtaining
  907.     the PKZIP utilities from your BBS.
  908.     * NOTE: If there is a BBS ad in a SFX archive, and SFX_CVT is set to 'no',
  909.             the ad will remain in the archive. Can't be helped...
  910.  
  911. KEEP_AV
  912.     If you want ULP to keep ZIP archives with authenticity verification stamps
  913.     (-AV) regardless of the other archiving control flags, then set this to
  914.     'yes', or comment it out. If you set this flag to 'no', then the archive
  915.     will be recompressed per the other control flags.
  916.     * NOTE: If there is a BBS ad in a -AV stamped archive, and KEEP_AV is set
  917.             to 'yes', the ad will remain in the archive.
  918.  
  919. KEEP_ENV
  920.     If you want ULP to keep ARJ archives with security envelopes (similar to a
  921.     ZIP -AV) regardless of the other archiving control flags, then set this to
  922.     'yes' or comment it out. If you set this flag to 'no', then the archive
  923.     will be recompressed per the other control flags.
  924.     * NOTE: If there is a BBS ad in a secured archive, and KEEP_ENV is set to
  925.             'yes', the ad will remain in the archive.
  926.  
  927. ARCHIVER DEFINITIONS:
  928. ─────────────────────
  929. Each archiver is denoted by ARCHIVER x, where x is a sequential number. Up to 9
  930. archivers can be executed by ULP. ULP is capable of automatically detecting
  931. ARC, ARJ, HYP, LZH, PAK, SQZ, ZIP and ZOO archives. The next 7 keywords are
  932. required after the ARCHIVER statement; do not comment any of them out or insert
  933. other parameters or comments in between them. I would also advise against
  934. changing the command options I have set, unless you have need to do so. Some
  935. are there to ensure uninterrupted processing (e.g. /m1 in LHA). Any other
  936. archiver can be added, if desired; the only requirement is that the archiver
  937. must return a DOS errorlevel so that ULP can determine if it ran properly. If
  938. you do not explicitly define the path to your archiver(s), it must in a
  939. directory included in the DOS PATH environment variable.
  940. * NOTE: The ARJ and ZIP formats MUST be included for ULP to function properly!
  941.         ARCHIVER    = denotes the beginning of an archiving program
  942.                       definition.
  943.         ARC_EXT     = the extension for this particular archiving format.
  944.         ARC_PRIMARY = if this is the default archiving format you use on your
  945.                       BBS, type YES; if not, type NO.
  946.         ARC_PACK    = the command line to pack archives, including all
  947.                       command-line switches desired. Place the variable
  948.                       @ARCHIVE@ where the filename is to be inserted in the
  949.                       command line and @FILES@ where the filespec is to be
  950.                       inserted. If you want a comment to be inserted, you must
  951.                       include it in the command-line switches. This cannot
  952.                       be a batch file! (DOS re-direction is allowed)
  953.         ARC_COMMENT = the command line to comment archives. Place the variable
  954.                       @ARCHIVE@ where the filename is to be inserted in the
  955.                       command line. If the archiver does not support comments,
  956.                       or if you do not wish to add comments, leave the line
  957.                       blank.
  958.         ARC_UNPACK  = the command line to unpack archives, including all
  959.                       command-line switches desired. Place the variable
  960.                       @ARCHIVE@ where the filename is to be inserted in the
  961.                       command line. This cannot be a batch file! (No DOS
  962.                       re-direction allowed)
  963.         ARC_TEST    = the command line to test archives, including all
  964.                       command-line switches desired. Place the variable
  965.                       @ARCHIVE@ where the filename is to be inserted in the
  966.                       command line. This cannot be a batch file! (No DOS
  967.                       re-direction allowed)
  968.         ARC_ERR     = the errorlevel that the archiver returns upon success.
  969.                       This information should be available in the program's
  970.                       documentation.
  971.  
  972. UNCOMPRESSED FILES TO PROCESS:
  973. ──────────────────────────────
  974. PROC_EXT
  975.     ULP can process selected uncompressed uploads, using this option. Up to 10
  976.     uncompressed file types can be specified by extension. Do not use any
  977.     compression format extensions (ARJ, ZIP, etc.)! Any files that are uploaded
  978.     with one of these extensions and could not be identified by signature will
  979.     be file-checked, duplicate-checked, and compressed using your default
  980.     archiving method. If you do not want to use this feature, simply remove or
  981.     comment out these lines. It probably is not a good idea to have EXE as an
  982.     extension to compress, since ULP is not able to detect ARC, HYP or ZOO
  983.     self-extractors, and they would be packed as an uncompressed archive.
  984.  
  985. FILES TO NEVER PROCESS:
  986. ───────────────────────
  987. NO_PROC_EXT
  988.     ULP can be forced to NOT process selected uploads, using the NO_PROC_EXT
  989.     keyword. Up to 10 file types can be specified by extension. THESE FILES
  990.     WILL BE AUTOMATICALLY PASSED; be sure this is desired. This is intended for
  991.     use with non-DOS uploads, such as the Unix Tar Z format, or Macintosh
  992.     files. Note that these files will NOT be uncompressed, tested for viruses,
  993.     duplication, age, etc.. Please note this fact to your users of these files.
  994.  
  995. FILE-CHECKING (VIRUS SCANNING, ETC.):
  996. ─────────────────────────────────────
  997. Each file checker is denoted by FILE_CHECKER x, where x is a sequential number.
  998. Up to 3 file checking programs can be executed by ULP. The next 2 keywords are
  999. required after the FILE_CHECKER statement; do not comment them them out or
  1000. insert other parameters or comments in between them. Any kind of file checker
  1001. may be used, such as a virus checker, or a 3rd party CRC duplication checker,
  1002. if desired. If you do not explicitly define the path to your file checking
  1003. program(s), it must in a directory included in the DOS PATH environment
  1004. variable. The only requirement is that it must return a DOS errorlevel,
  1005. otherwise ULP has no clue if there was an error or not. Note that if you are
  1006. running a network, the use of network-specific scanners may be necessary.
  1007. * NOTE: If you are using McAfee's SCAN (most sysops do), be sure you are using
  1008.         the correct program. SCAN is fine for single node and multitasker
  1009.         systems and scanning a local drive from the network server, but NETSCAN
  1010.         is required to scan a network drive from a workstation.
  1011.         FILE_CHECKER = denotes the beginning of a file-checker definition.
  1012.         FILE_CHK_CMD = the command line to execute each file checker, including
  1013.                        all command-line switches. Place the variable @FILES@
  1014.                        where the filespec is to be placed on the command line.
  1015.                        This cannot be a batch file! (No DOS re-direction
  1016.                        allowed)
  1017.         FILE_CHK_ERR = the errorlevel that the file checking program returns
  1018.                        upon success. This information should be available in
  1019.                        the program's documentation.
  1020.  
  1021. GIF FILE CHECKING
  1022. ─────────────────
  1023. MIN_WIDTH
  1024.     If ULP is to reject GIF files based upon picture width, enter the minimum
  1025.     acceptable width in pixels. If no width limit is desired, set it to zero or
  1026.     comment out the line.
  1027.  
  1028. MIN_HEIGHT
  1029.     If ULP is to reject GIF files based upon picture height, enter the minimum
  1030.     acceptable height in pixels. If no height limit is desired, set it to zero
  1031.     or comment out the line.
  1032.  
  1033. MIN_COLORS
  1034.     If ULP is to reject GIF files based upon the number of colors in the
  1035.     picture, enter the minimum acceptable number of colors. If no color limit
  1036.     is desired, set it to zero or comment out the line.
  1037.  
  1038. KEEP_GIFLITE
  1039.     If ULP is to keep uploaded GIF files if they have been compressed with
  1040.     GIFLITE, set this to YES. If not, set it to NO or comment it out. At this
  1041.     time, if you use GIFTEST, this parameter will have no effect.
  1042.     * NOTE: Accepting GIFLITEd GIF files can compromise the duplication system
  1043.             due to its variable compression ratio! I strongly suggest you do
  1044.             not accept GIFLITEd GIF files!
  1045.  
  1046. Each external GIF file checker is denoted by GIF_CHECKER x, where x is a
  1047. sequential number. Up to 3 GIF file checking program(s) can be executed by ULP.
  1048. In addition, do not use the GIF file checking program's internal duplicate
  1049. checking or file handling abilities, if any. ULP and ULPTEST will take care of
  1050. these operations. The next 2 keywords are required after the GIF_CHECKER
  1051. statement; do not comment them out or insert other parameters or comments in
  1052. between them.
  1053.         GIF_CHECKER = denotes a new file checking/virus program definition.
  1054.         GIF_CHK_CMD = the command line to execute each GIF file checker,
  1055.                       including all command-line switches. Place the variable
  1056.                       @FILES@ where the filespec is to be placed on the command
  1057.                       line. This cannot be a batch file! (No DOS re-direction
  1058.                       allowed)
  1059.         GIF_CHK_ERR = the errorlevel that the GIF file checking program returns
  1060.                       upon success. This information should be available in the
  1061.                       program's documentation.
  1062.  
  1063. DESCRIPTION PROCESSING:
  1064. ───────────────────────
  1065. WORD_WRAP
  1066.     If you want ULP to word-wrap inserted descriptions, enter YES for smart
  1067.     word-wrapping, otherwise, type NO or comment the line out. Note that ULP
  1068.     now checks for boxes, etc. before attempting a word-wrap.
  1069.  
  1070. INT_DESC
  1071.     ULP can extract and insert FILE_ID.DIZ and DESC.SDI internal description
  1072.     files into the DIRxx files. If you want ULP to insert internal description
  1073.     files, type YES; if not, type NO or comment the line out.
  1074.  
  1075. DESC_LIMIT
  1076.     If ULP is to insert internal description files, the following parameter is
  1077.     the maximum number of lines that ULP will insert from the description file.
  1078.     This defaults to 10 if the line is commented out. Clark Development Company
  1079.     (the developer of PCBoard and FILE_ID.DIZ) has defined that a FILE_ID.DIZ
  1080.     file should have no more than 10 lines, but ULP will insert up to 15 lines.
  1081.  
  1082. INFO_LINE
  1083.     ULP can add a line of archive information for the benefit of your users.
  1084.     The format is completely defined by you. If you want ULP to add a single
  1085.     line to the archive description, type YES; if not, type NO or comment the
  1086.     line out. Note that the statistics generated by ULP will not include any
  1087.     FILE_ID.DIZ or DESC.SDI files found in the archive.
  1088.  
  1089. INFO_INDENT
  1090.     The column where the | marker goes in your directory listing setup. The
  1091.     standard PCBoard setup indents to column 32.
  1092.  
  1093. ARC_INFO_FMT
  1094.     The format that you would like for the archive information line (do not
  1095.     include the '|' character or the space; ULP will add those). This format is
  1096.     completely configuration by the user; any ASCII character can be used. To
  1097.     include specific information compiled by ULP, just add the variables. The
  1098.     legal variables are (must be in all caps):
  1099.         @#@      = Number of files in the archive (and nested archives)
  1100.         @NEWEST@ = Date of the newest file in the archive
  1101.         @OLDEST@ = Date of the oldest file in the archive
  1102.         @BYTES@  = The total number of bytes (uncompressed) in the archive
  1103.         @DATE@   = Today's date
  1104.         @CR@     = Inserts a line break for multiline capability
  1105.  
  1106. GIF_INFO_FMT
  1107.     The format that you would like for the GIF information line (do not include
  1108.     the '|' character or the space; ULP will add those). The legal variables
  1109.     are (must be in all caps):
  1110.         @WIDTH@    = Horizontal resolution (number of columns)
  1111.         @HEIGHT@   = Vertical resolution (number of rows)
  1112.         @COLORS@   = Number of colors in GIF
  1113.         @COMPRESS@ = Inserts "GIFLITE" or "None", depending upon compression
  1114.         @DATE@     = Today's date
  1115.         @CR@       = Inserts a line break for multiline capability
  1116.  
  1117. DOWNLOAD.TXT UPDATING:
  1118. ──────────────────────
  1119. UPDATE_DLTXT
  1120.     If you want ULP to scan your DOWNLOAD.TXT file and update the file
  1121.     extension of the upload to reflect the correct archiving method used, enter
  1122.     YES. If not, enter NO or comment the line out. This feature will allow
  1123.     utilities that scan DOWNLOAD.TXT for file information to reflect correct
  1124.     information.
  1125.     * NOTE: If you are using a utility that creates an independent database
  1126.             from the DOWNLOAD.TXT file, such as PCBFX version 2.x, be sure
  1127.             ULP.EXE is run in the event BEFORE that utility so the independent
  1128.             database reflects the changes that ULP makes to DOWNLOAD.TXT.
  1129.  
  1130. DLTXT_FILE
  1131.      The full path and name for the PCBoard DOWNLOAD.TXT file.
  1132.  
  1133. ULPTEST TESTING:
  1134. ────────────────
  1135. TEST_MODE
  1136.     This defines how ULPTEST processes an archive. NORMAL indicates a full test
  1137.     is to be performed, identical to the ULP event processing except that the
  1138.     archive formats are not converted or recompressed (this is a limitation of
  1139.     PCBoard). FAST indicates a fast test in which the archive is scanned for
  1140.     archive integrity, duplicates, and age without unpacking the archive (ARJ
  1141.     and ZIP files only). If this mode is used, it should be held for later
  1142.     processing by ULP so that it can be file-checked for viruses, etc. Also,
  1143.     FAST mode can only 'see' one level deep in the archive. If you have a slow
  1144.     computer and/or hard disk, FAST mode would be preferable for your users
  1145.     when large archives are uploaded. If you comment this line out, NORMAL mode
  1146.     is assumed. I recommend you use NORMAL mode, and then set a limit with the
  1147.     next parameter for when FAST mode will be utilized.
  1148.  
  1149. TEST_LIMIT
  1150.     If NORMAL mode is used, the archive's file size will first be compared
  1151.     against this limit (in kilobytes). If it is larger than this number of
  1152.     kilobytes, it will be forced into FAST mode to speed the process and
  1153.     prevent wasting the user's online time. Entering 0, or commenting the line
  1154.     out will disable this feature, resulting in NORMAL mode being used at all
  1155.     times. If TEST_MODE is set to FAST, this parameter has no effect. For my
  1156.     system, a good value is 300 kilobytes, as anything much bigger than this
  1157.     takes quite awhile to decompress, test, and delete the files extracted.
  1158.  
  1159. COMM_IO
  1160.     If you want ULPTEST to output status information to the user on-line, set
  1161.     it to YES; if you do not want ULPTEST to output status information, enter
  1162.     NO or comment the line out. ULPTEST supports both direct interrupt-driven
  1163.     I/O and FOSSIL driver I/O.
  1164.  
  1165. SUPPRESS_HDR
  1166.     If you want ULPTEST to suppress the program header output to the user via
  1167.     the COM port (the program name, copyright notice, and registration
  1168.     information). This gives a seamless look for ULP into PCBoard. If this is
  1169.     desired, set this to YES; otherwise, set to NO or comment out the line. * *
  1170.     NOTE: This will work for registered users only!
  1171.  
  1172. BBS AD HANDLING:
  1173. ────────────────
  1174. ADS_CHK
  1175.     If you want ULP to remove known BBS ads from new uploads during processing,
  1176.     type YES; if not, type NO or comment the line out.
  1177.  
  1178. ADS_DB
  1179.     The directory path and name for the BBS ads database. This database can be
  1180.     updated by the sysop by using the ULPADS utility (see section 11 of this
  1181.     document), freeing the sysop from being reliant on me to maintain the ads
  1182.     database. If you find a large number of new BBS ad files, please upload
  1183.     them to my board for inclusion into my master ads database.
  1184.  
  1185. BBS_AD_FILE
  1186.     The directory path and filename for your BBS ad to be added to each and
  1187.     every archive processed by ULP. Note that you must provide a path, or it
  1188.     will not be copied. I STRONGLY recommend against them; BBS ads are
  1189.     aggravating to other sysops, so please be considerate and use the ARJ or
  1190.     ZIP comment instead. BBS ad files are the scourge of the BBS world. This
  1191.     parameter is commented out by default.
  1192.  
  1193. CRC-32 DUPLICATE FILE CHECKING:
  1194. ───────────────────────────────
  1195. DUPE_CHK
  1196.     If you want ULP to use its internal CRC-32 duplication checking, type YES;
  1197.     if not, type NO or comment the line out. If you want to use a third-party
  1198.     duplication checker, such as ZDCS, refer to Appendix B for installation
  1199.     information. I would strongly suggest using ULP's, as it is fast and
  1200.     compact, not to mention integrated, eliminating the time to shell to disk
  1201.     for each file in each archive to be tested.
  1202.  
  1203. DUPE_LIMIT
  1204.     The minimum percentage of duplication allowed for a file to pass. Anything
  1205.     smaller will pass regardless of the executable duplication limit. I would
  1206.     suggest this number be set to around 50, as some program authors don't
  1207.     modify every file, especially with maintenance releases.
  1208.  
  1209. EXE_DUPE_LIMIT
  1210.     The maximum percentage of duplication allowed for executable files and
  1211.     overlays to pass. This number should be higher than DUPE_LIMIT; I would
  1212.     recommend about 80. This will catch archives that are duplicates, but
  1213.     someone has changed enough files to normally pass it when uploaded (such as
  1214.     configs, high score files, etc.). This will also pass files where the
  1215.     author has changed nothing but the executables; they would have failed
  1216.     before. Executables are determined by extension; any file with one of the
  1217.     following extensions will be counted as an executable: EXE, COM, SYS, OVL,
  1218.     OVR, DLL.
  1219.  
  1220. DUPE_DB
  1221.     The path and name for the CRC-32 database file. It's a good idea to keep
  1222.     the database, index, and new data files all together, just to make things
  1223.     easier.
  1224.  
  1225. DUPE_IDX
  1226.     The path and name for the CRC-32 database file index.
  1227.  
  1228.  
  1229. ┌────────────────────────┐
  1230. │  10. Manual Operation  │
  1231. └────────────────────────┘
  1232.  
  1233. While the ULP system is mostly automatic, there are occasions where some
  1234. operations may have to be done manually:
  1235.  
  1236. ULP:
  1237. ────
  1238. During the course of operation, ULP will rename archives that have been found
  1239. to be defective in some manner according to the following convention:
  1240.  
  1241.     .UNK    Unknown archive format
  1242.     .DOS    DOS reserved keyword found in archive
  1243.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1244.     .CHK    Error found while file checking archive file (virus, etc.)
  1245.     .DUP    Excessive duplicate files contained in archive
  1246.     .PCK    Error occurred while repacking archive file
  1247.     .AGE    Age limit exceeded by archive file
  1248.     .ENC    Encrypted file found in archive
  1249.     .BOM    Bomb file detected in archive
  1250.     .BAD    Error found while testing GIF file
  1251.     .RES    Unacceptable GIF resolution
  1252.     .GLT    GIF compressed with GIFLITE
  1253.  
  1254. I would enter these extensions in your UPSEC file, as ULP will automatically
  1255. pass over any file with these extensions, presuming that they are defective
  1256. archives. Doing so will prevent a user from uploading a file with one of these
  1257. "reserved" extensions.
  1258.  
  1259. If you feel that these files are acceptable after reviewing them, you can force
  1260. them to be accepted by adding the command-line switch -O (for override) to the
  1261. ULP command line, e.g.:
  1262.  
  1263.     ULP -Culp.bin -O
  1264.  
  1265. This will accept the archives regardless of duplication or age limits. It will
  1266. not override unpacking, packing, integrity and virus errors, however, for the
  1267. safety of your board and your users.
  1268.  
  1269. To initialize the ULP process database, use the -I command line switch:
  1270.  
  1271.     ULP -Culp.bin -I
  1272.  
  1273. ULP will scan your source upload directories as configured and generate a
  1274. process data file. From then on, ULP will maintain this data file
  1275. automatically.
  1276.  
  1277. Three other command-line parameters are available in ULP. '-R' will retest all
  1278. archives found in the subdirectory passed to it. It will not use duplication
  1279. checking or age checking, nor will it repack the archive; it was installed to
  1280. allow the periodic retesting of archives for viruses, etc.:
  1281.  
  1282.     ULP -Culp.bin -Rc:\temp\
  1283.  
  1284. Another, '-M' will retest and convert all archives found in the subdirectory
  1285. indicated; this can be used for mass archive conversion:
  1286.  
  1287.     ULP -Culp.bin -Mc:\temp\
  1288.  
  1289. Note that the '-R' and '-M' switches cannot be used on a CD-ROM or other
  1290. write-protected media at this time.
  1291.  
  1292. ULPDB:
  1293. ──────
  1294. If a file has been failed for some reason, you can view the contents of the
  1295. archive using the -V command switch with ULPDB. This will scan the archive, and
  1296. generate a report of the results, which are indicative of why it failed. For
  1297. example:
  1298.  
  1299.     ULPDB -Culp.bin -Vc:\privul\archive.dup
  1300.  
  1301. This will produce a report of the archive ARCHIVE.DUP located in the specified
  1302. path. This can be useful in determining if an archive that failed duplication
  1303. should be removed or should be accepted anyway, and similar reasons.
  1304.  
  1305. In addition, duplication databases can be merged using the -M command-line
  1306. option. In order to merge a second database into your main database:
  1307.  
  1308.     ULPDB -Culp.bin -Msecond.db
  1309.  
  1310. where 'second.db' is the full path and filename for the second duplication
  1311. database to be merged with the main CRC-32 database.  This will allow pre-built
  1312. databases to be constructed for CD-ROM disks for easy implementation.
  1313.  
  1314. Finally, database entries can be purged from the database using the file date
  1315. contained in the database record using the -P command switch:
  1316.  
  1317.     ULPDB -Culp.bin -P60
  1318.  
  1319. where '60' is the maximum age (in months) for a file to remain in the database.
  1320. Removal is based upon the file date represented by the entry, NOT the date the
  1321. file entry was made into the database; these are not one and the same. In the
  1322. example above, all records for files older than 60 months (5 years) will be
  1323. removed from the database. As a protective measure, ULPDB will not perform a
  1324. purge if the value specified is less than 6 months.
  1325.  
  1326.  
  1327. ┌──────────────────────────┐
  1328. │  11. BBS Ads and ULPADS  │
  1329. └──────────────────────────┘
  1330.  
  1331. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1332. the file contents and other data. In this fashion, ULP can detect a known ad
  1333. file despite the file name and date.
  1334.  
  1335. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1336. sysops who insert the @!&*#%$ things, I have included a utility called ULPADS
  1337. that can scan a BBS ad file, and update the BBS ads with it's information.
  1338. Don't worry about duplication, as part of the process is to purge duplicate BBS
  1339. ad info. The command-line syntax for the ULPADS.EXE program is simply:
  1340.  
  1341.     ULPADS -Ddatabase.ad -Fbbs.ad
  1342.  
  1343. where 'database.ad' is the full path and filename for the BBS ads database, and
  1344. 'bbs.ad' is the path and filename for the BBS ad file to be added to the ads
  1345. database.
  1346.  
  1347. If you have a subdirectory full of BBS ads, the following batch file provided
  1348. by Ian Singer may be of help:
  1349.  
  1350.     rem DELADS.BAT
  1351.     rem this batch file written by Ian Singer 1 Jul 92 to take all
  1352.     rem the bbs ads in c:\ulp\ad and run them against the database
  1353.     rem in c:\ulp
  1354.     rem
  1355.     for %%f in (c:\ulp\ad\*.*) do ULPADS -Dc:\ulp\ulpads.db -F%%f
  1356.  
  1357. I would greatly appreciate your uploading of any new BBS ad files that you may
  1358. collect over time to my BBS so I can update the master listing that I include
  1359. with the ULP distribution archive. Please refer to the top of this document for
  1360. my BBS number.
  1361.  
  1362. The latest version of my BBS ads database is included in the distribution
  1363. archive. In order to add whatever new BBS ads information that may be
  1364. contained, you can merge the two BBS databases:
  1365.  
  1366.     ULPADS -Dmaster.db -Mother.db
  1367.  
  1368. where 'master.db' is the full path and filename for the master (your) BBS ads
  1369. database, and 'other.db' is the path and filename for the other BBS ads
  1370. datatbase to be merged with the master ads database.
  1371.  
  1372.  
  1373. ┌───────────────┐
  1374. │  12. Support  │
  1375. └───────────────┘
  1376.  
  1377. If you require support for ULP, I can be contacted by any of the following
  1378. means:
  1379.  
  1380.     ∙ Fidonet netmail (node:  1:276/112)
  1381.     ∙ Intelec PCBoard conference
  1382.     ∙ RoseNet routed mail (system ID:  BB-P)
  1383.     ∙ The ULP support conference (#42) on Salt Air (PCBoard support BBS)
  1384.     ∙ The Support conference (#2) on my BBS (listed at the top of this
  1385.         document).
  1386.  
  1387.  
  1388. ┌─────────────────────────┐
  1389. │  13. The Future of ULP  │
  1390. └─────────────────────────┘
  1391.  
  1392. ULP will be supported as long as I'm in the BBSing business (which will be
  1393. quite a while...once it's in your blood, you can never shake it <grin>). The
  1394. ULP system will be rapidly expanding it's features so it will be your first
  1395. choice in BBS upload processors. Some current plans:
  1396.  
  1397.       ∙ Add the ability to preprocess files prior to file checking them;
  1398.         for example, decompress executables that have been PKLite'd.
  1399.       ∙ Support other BBS software directory listing formats.
  1400.  
  1401. If you have any other suggestions, or want other archivers supported, please
  1402. contact me via Email, U.S. snail-mail or on my BBS at the number at the top of
  1403. this document.
  1404.  
  1405. Thanks for giving ULP a try!
  1406.  
  1407.  
  1408. ┌────────────────────────────────┐
  1409. │  Appendix A:  DOS Errorlevels  │
  1410. └────────────────────────────────┘
  1411.  
  1412. The errorlevels returned to DOS by the ULP system programs are consistent
  1413. among all of the programs (primarily with the error conditions); the following
  1414. is a list of the errorlevels than can be returned by the ULP programs, along
  1415. with which programs return the codes:
  1416.  
  1417.         0       Successful execution (ULPTEST, ULPDB, ULPADS)
  1418.         0       Successful execution, archives were processed (ULP)
  1419.         1       Successful execution, nothing to do (ULP)
  1420.         1       Unknown archive format (ULPTEST)
  1421.         2       DOS reserved keyword found in archive (ULPTEST)
  1422.         3       Error unpacking archive (archive integrity) (ULPTEST)
  1423.         4       Error file checking archive files (virus, etc.) (ULPTEST)
  1424.         5       Error duplicate checking archive files (ULPTEST)
  1425.         7       Error commenting archive (ULPTEST)
  1426.         8       Age limit exceeded by archive files (ULPTEST)
  1427.         9       Encrypted file found in archive files (ULPTEST)
  1428.         10      Bomb archive detected (ULPTEST)
  1429.         11      Bad GIF file (ULPTEST)
  1430.         12      Unacceptable GIF resolution (ULPTEST)
  1431.         13      GIF compressed with GIFLITE (ULPTEST)
  1432.         99      Help screen (executing a program with no or an insufficient
  1433.                    number of arguments) (All)
  1434.         100     Could not close all open files (ULP, ULPTEST, ULPDB)
  1435.         101     Unknown command line parameter (All)
  1436.         102     Config file not found (All)
  1437.         103     Invalid config file format (All)
  1438.         104     Excessive number of command line parameters defined for
  1439.                    file checker (maximum number of parameters is 10) (ULP)
  1440.         105     Excessive number of command line parameters defined for
  1441.                    archiver (max is 10) (ULP, ULPTEST, ULPDB)
  1442.         106     Excessive number of words defined in archive information
  1443.                    line (max is 10) (ULP)
  1444.         107     No primary archiver defined (ULP)
  1445.         108     Invalid disk buffer size (All)
  1446.         109     Upload directory list file(s) not found (ULP, ULPTEST)
  1447.         110     Unable to allocate heap memory (All)
  1448.         111     Unable to open or lock disk logging file (ULP, ULPTEST, ULPDB)
  1449.         112     Invalid registration code or attempting to run 286 or 386
  1450.                    versions without registering (ULP, ULPTEST, ULPDB)
  1451.         113     Unable to open/lock CRC database file(s) (ULP, ULPTEST, ULPDB)
  1452.         114     Unable to open BBS ads database file (ULP, ULPADS)
  1453.         115     Invalid filename provided by user on command-line (ULP, ULPTEST)
  1454.         116     Invalid path provided by user on command-line (ULPDB)
  1455.         117     Invalid or no node number (valid values are 1 to 256) (ULPTEST)
  1456.         118     CRC database usage not enabled (configuration file parameter
  1457.                    DUPE_CHK is set to 'no') (ULPDB)
  1458.         120     Invalid or old database format (All)
  1459.         121     Unable to process com port/invalid port parameter (ULPTEST)
  1460.         122     Unable to access PCBOARD.DAT/PCBOARD.SYS (ULPTEST)
  1461.         123     CRC database failed validation test (ULPDB)
  1462.         200     Undefined error (internal to ULP system program(s))
  1463.  
  1464.  
  1465. ┌────────────────────────────────────────────────────────┐
  1466. │  Appendix B:  Using ZDCS vs. ULP's Duplication System  │
  1467. └────────────────────────────────────────────────────────┘
  1468.  
  1469. The following message should provide the information required to integrate ULP
  1470. and ZDCS:
  1471. ===========================================================================
  1472. Packet: SALTAIR
  1473. Date: 05-11-93 (08:42)             Number: 44
  1474. From: STACY SMITH                  Refer#: 1187
  1475.   To: ALL                           Recvd: NO
  1476. Subj: ULP/ZDCS PCBTEST.BAT  1/2      Conf: (44) ZDCS
  1477. ---------------------------------------------------------------------------
  1478. Between myself and another ZDCS user, we have come up with a simple way to
  1479. use ZDCS and ULP together by running ZDCS after ULPTEST in PCBTEST.BAT.
  1480. While I will continue to work on internal support for ZDCS within ULP, this
  1481. will make the combination quite functional in the interim.
  1482.  
  1483. ===========================================================================
  1484. Packet: BB-P
  1485. Date: 05-11-93 (02:55)             Number: 1187
  1486. From: JIM CONDON                   Refer#: NONE
  1487.   To: ALL                           Recvd: NO
  1488. Subj: ULP/ZDCS PCBTEST.BAT           Conf: (2) Support
  1489. ---------------------------------------------------------------------------
  1490. After trying other Upload testing programs for PCBoard I think I have found
  1491. one that suits my needs and is reliable.  I like the ZDCS dupe checking
  1492. system better then the one that comes with ULP.  If you like what you got
  1493. stop reading!  If you would like to use ZDCS along with ULP below is my
  1494. pcbtest.bat.  It will not test file attaches (in PCBoard 15.0's message
  1495. base). If you want to do that remove line 6.  It will use ULPTEST via
  1496. PCBoard's TEST command to check the integrity of files that are already
  1497. online.  It will also test uploads using ULPTEST first.  If it fails for any
  1498. reason it will go back to PCBoard without adding the bad upload to the ZDCS
  1499. database.  If ULPTEST passes the file then ZDCSFC is called to add it to the
  1500. database.  It will also test zdcstest.chk files without loading ULPTEST. You
  1501. will have to edit it slightly to reflect where to look for the file being
  1502. tested.  Also your paths to ZDCSFC and ULP maybe different.  Feel free to
  1503. use or modify (like I could stop you if I wanted to!) it to suit your needs.
  1504. I hope this helps.
  1505.  
  1506.       @echo off
  1507.       cls
  1508.       IF EXIST PCBFAIL.TXT DEL PCBFAIL.TXT
  1509.       IF EXIST PCBPASS.TXT DEL PCBPASS.TXT
  1510.       IF EXIST ZDCS-DEL.LST DEL ZDCS-DEL.LST
  1511.       if '%2 == 'ATTACH goto end
  1512.       if %1 == D:\PRIVATE\ZDCSTEST.CHK goto zdcs
  1513.       c:\ulp\ulptest -Cc:\ulp\ulp.bin -F%1 -M%2 -D%3
  1514.       if exist pcbfail.txt goto end
  1515.       if %2 == TEST goto end
  1516.       goto ZDCS
  1517.       :zdcs
  1518.       c:\zdcs\zdcsfc %1 %2 %3
  1519.       if exist d:\private\zdcstest.chk del d:\private\zdcstest.chk
  1520.       :end
  1521.  
  1522. Line 1 and 2 are self explanatory I think!
  1523. Lines 3, 4 and 5 are just house keeping (extra precaution) that was in the
  1524.     sample pcbtest.bat that came with ZDCS 2.0.
  1525. Line 6 is a line David Terry (CDC) suggests people running 15.0 add to pass
  1526.     file attaches without testing.
  1527. Line 7 Checks to see if this is a ZDCSTEST.CHK file and if it is skips past
  1528.     ULP and just runs ZDCS.
  1529. Line 8 is the ULPTEST command line from the docs (or was it the included
  1530.     pcbtest.bat?)  Anyway Stacy Smith's line.
  1531. Line 9 tests to see if ULPTEST failed the upload for ANY reason.  I think
  1532.     this way is better then errorlevel testing.  If pcbfail.txt is found it
  1533.     exits back to PCBoard and NEVER runs ZDCSFC.  I feel if the upload
  1534.     failed it shouldn't be added to the ZDCS database since someone else may
  1535.     try to upload a good copy that would then probably fail the dupe check.
  1536. Line 10 checks to see if pcbtest.bat was invoked via the TEST command in
  1537.     PCBoard and if it is skip ZDCSFC and brings PCBoard backup without
  1538.     wasting time loading ZDCSFC just to have it pass control back to
  1539.     PCBoard.
  1540. Line 11 Takes you to ZDCSFC.  If it got this far it should be a valid upload
  1541.     and ZDCSFC should test it and add it to the database.
  1542. Line 12 just a DOS label.
  1543. Line 13 the actual ZDCSFC command.  I believe it is from a sample
  1544.     pcbtest.bat that came with ZDCS 2.0.
  1545. Line 14 Checks for the zdcstest.chk file and deletes it.  For some reason I
  1546.     was sometimes getting one left over and callers couldn't upload a test
  1547.     file till I killed it off.  It probably isn't even needed.
  1548. Line 15 is just a Dos label.
  1549.  
  1550. P.S.  Don't forget to configure ULP and ULPTEST not to use ULPDB
  1551.       if you are using ZDCSFC instead.  One dupe checker is enough!
  1552. ===========================================================================
  1553.  
  1554. Some comments of my own regarding the above message:
  1555.  
  1556. Lines 3 and 4 are superfluous, but don't hurt anything. ULPTEST, as a matter
  1557.     of design, cleans up any stray PCBPASS.TXT and PCBFAIL.TXT files.
  1558. Line 6 is not necessary when version 0.99ß is released in a week or two, as
  1559.     ULPTEST is/will be fully compatible with PCBoard 15.0, including attach
  1560.     mode. ULPTEST will test and log the results of testing an attachment,
  1561.     while always passing the attached file (there's no reason to reject an
  1562.     attachment, although it might be interesting to know if a virus is in
  1563.     one).
  1564. Line 13 doesn't require the %3 parameter on the ZDCS command line. At this
  1565.     point, ULPTEST has already inserted the FILE_ID.DIZ and DESC.SDI file
  1566.     and ZDCS is just duplicating effort.
  1567.  
  1568. Also note that you cannot use the VERIFY.ULP method of pre-verifying
  1569. uploads; you will have to tell your users to continue using the ZDCSTEST.CHK
  1570. method. If there are any questions, please don't hesitate to ask. I can't
  1571. help with ZDCS questions, but I can help with everything else.
  1572.