home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / vrac / uu32.zip / UU.DOC < prev   
Text File  |  1994-06-19  |  61KB  |  1,089 lines

  1.       UU version 3.2  --  A small, fast, and smart uudecoder for DOS
  2.         Copyright (C) June 1994  --  ir.drs. Benjamin J. Walbeehm
  3.  
  4.                               June 19, 1994
  5.  
  6.  
  7. Contents:  -  Introduction
  8.            -  Quick instructions
  9.            -  On the uuencoding standard
  10.            -  Command line parameters, switches, and environment
  11.            -  What UU does, and does not do
  12.            -  UUTool-encoded files
  13.            -  Handling unsorted sections
  14.            -  Handling wildcards
  15.            -  Plans for the next version (3.3) of UU
  16.            -  Plans for the more distant future
  17.            -  Acknowledgements
  18.            -  Release history
  19.            -  How to get on the UU mailing list
  20.            -  Contacting the author
  21.  
  22. If you are pressed for time, then I suggest you read "Quick instructions"
  23. now, and the rest later.
  24.  
  25.  
  26. Introduction
  27. ~~~~~~~~~~~~
  28. UU is shipped in a package called UU??.ZIP, where ?? is replaced by the version
  29. number. Until further notice, whenever I have a new version of UU, I shall
  30. upload it to
  31.     FTP   : ftp.portal.com       /pub/bryanw/pc/misc
  32.     FTP   : illuminati.io.com    /pub/usr/zboray/coding
  33.     FTP   : wuarchive.wustl.edu  /pub/MSDOS_UPLOADS/uucode
  34.     USENET: alt.binaries.pictures.utilities
  35.  
  36. Pointer messages announcing the new release will be posted to
  37.     USENET: alt.binaries.misc
  38.     USENET: alt.binaries.pictures.d
  39.     USENET: alt.binaries.pictures.erotica
  40.     USENET: alt.binaries.pictures.erotica.d
  41.     USENET: alt.binaries.pictures.misc
  42.     USENET: alt.binaries.pictures.supermodels
  43.     USENET: alt.binaries.pictures.tasteless
  44.     USENET: de.alt.binaries.pictures.d
  45.  
  46. In addition to the UU??.ZIP packages, I also post UU??.EXE packages to the
  47. alt.binaries.pictures.utilities newsgroup. These are self extracting archives,
  48. which means that they unZIP themselves. Moreover, the UU??.EXE postings can
  49. even be decoded by those that do not yet have a uudecoder!
  50.  
  51. If for some reason you are unable to obtain the UU package in any of the
  52. aforementioned ways, feel free to ask me to e-mail it to you. My e-mail
  53. address may be found at the end of this manual. You can also make sure
  54. that you will receive new versions of UU right into your own mailbox as
  55. soon as they are released by subscribing to the UU mailing list. See the
  56. appropriate chapter in this manual for more information.
  57.  
  58. UU is a freeware program; please read the file INFO.TXT for more information
  59. on what I mean by this. If the file INFO.TXT was not included in your UU
  60. package, then you can obtain it by e-mailing (which is preferred), writing,
  61. or calling (which is least preferred) me. IN SHORT, THE ONLY THING I ASK FROM
  62. YOU WHEN YOU DECIDE THAT THIS PROGRAM IS OF USE TO YOU, IS THAT YOU SEND ME A
  63. SHORT E-MAIL.
  64.  
  65. Yes, I know... This manual has become rather long... I apologise for that,
  66. but I think that all things considered, it is best this way. Besides, almost
  67. nobody has complained about it so far. :-)
  68.  
  69. I have written this program primarily for my own convenience; the first time
  70. I downloaded (a lot of) uuencoded files from the USENET binaries, it took me
  71. over four hours to edit everything in such a way that the only uudecoder I
  72. had then (a very naive one) could process them. That was a once-but-never-
  73. again experience.
  74.  
  75. Starting with version 2.3, UU runs even on 8086 and 8088 processors, so I am
  76. once more obeying my "rule" to write programs that are 8086/8088 compatible.
  77. (Versions 2.2 and below required at least an 80286.)
  78.  
  79. As for memory requirements: The amount of RAM free for executables should be
  80. at least 97k for this program to work correctly: Amongst others, UU uses two
  81. 32k buffers to speed up reading and writing, as well as a 14k buffer to store
  82. filenames of input files. UU will check if there is enough RAM free, and
  83. complain if there is not. (I hear some people asking: "97k?"...  Yes, I know
  84. we are talking .COM here, but that does NOT mean we are restricted to 64k now,
  85. does it?)  Starting with version 3.1, UU will be even faster if there is more
  86. than the required amount of memory free, since it will use the remaining amount
  87. of conventional RAM for additional buffering.
  88.  
  89. I have finally figured out what the minimal DOS version is that this program
  90. requires: MS-DOS 2.00. Since I learnt that there still are people using an
  91. 8088 based machine, and running MS-DOS 2.10, but I have not heard of any
  92. lower versions of MS-DOS still being used, I think that (considering UU's
  93. processor, memory, and DOS requirements) I can safely say that UU will run
  94. on just about any PC and compatible. UU also runs flawlessly from the DOS box
  95. under Windows... Moreover, several people have reported UU running flawlessly
  96. from the DOS box under OS/2, and even on DOS emulators on other systems!
  97.  
  98. I suppose I should insert a line here stating that MS-DOS is a registered
  99. trademark of Microsoft Corp.
  100.  
  101. As with all the programs I write, a short usage message is included in UU.
  102. This message will be displayed by entering either of the following three
  103. commands:
  104.     UU /?
  105.     UU -?
  106.     TYPE UU.COM
  107.  
  108. Starting with version 2.0, UU no longer displays a usage message when one
  109. merely enters "UU". The reason for this is that I think that one should never
  110. get accustomed to invoking a program without parameters or switches just to
  111. get help, for there are numerous programs that really do something then. In
  112. fact, I have written a program (REMDIR.EXE) that can (depending on whether
  113. one really wants it to do what it does then) have disastrous effects then.
  114. What I am trying to say is: Never rely on a program to give you help by
  115. invoking it without any parameters or switches...
  116.  
  117.  
  118. Quick instructions
  119. ~~~~~~~~~~~~~~~~~~
  120. This chapter contains only the most vital instructions on UU. So if you are in
  121. a hurry, and do not have the time to read the entire manual, then read at least
  122. THIS chapter. I highly recommend everybody to read the entire manual as soon
  123. as they have the time, if only because UU can do a lot more than only what is
  124. described in this chapter. Besides, I have put a lot of time in making this
  125. manual (and I did not make it for myself...), and reading it in its entirety
  126. may keep YOU from asking silly questions, and ME from getting them and having
  127. to answer them. :-)
  128.  
  129. If you have one or more files containing uuencoded binaries, then enter the
  130. following command from the DOS prompt:
  131.     UU filename.ext
  132. where "filename.ext" is replaced by the actual filename. Wildcards * and ? are
  133. allowed, so you will usually not have to use a line like the one above for each
  134. separate file.
  135.  
  136. Each of the files you wish to process may contain multiple binaries which may
  137. consist of multiple parts, and which will usually also contain non-uuencoded
  138. lines. UU does not require you to edit the files first. Just leave everything
  139. in -- UU may even perform better that way! If the parts are not in the correct
  140. order, then you HAVE TO specify the /S switch.
  141.  
  142. An example: Suppose that you have a directory called C:\DOWNLOAD in which you
  143. have put several files containing articles from USENET (note that with UU it
  144. is not necessary that all parts of one binary are contained in one and the
  145. same file), and that you have a directory called C:\BINARIES in which all
  146. uudecoded binaries are to be put. Then, from the C:\BINARIES directory (and
  147. assuming that UU is accessible from there), enter the following command:
  148.     UU/S/D \DOWNLOAD\*.*
  149. This will have UU examine all the files in the C:\DOWNLOAD directory, and
  150. uudecode everything it can decode from these files. The decoded binaries are
  151. put in the current directory (i.e. C:\BINARIES), and all files that have been
  152. successfully processed (and ONLY those) are deleted (that is what the /D switch
  153. is for). So upon completion, the C:\DOWNLOAD directory will contain only files
  154. that do not contain uuencoded parts and perhaps also some files that contain
  155. (parts of) uuencoded binaries that could not be successfully decoded. So this
  156. way, UU can hugely help you sort out and process the articles.
  157.  
  158. This should get you going if you do not have the time to read the entire
  159. manual right now. If you want to know what else UU can do, then simply read
  160. the rest of this manual as well.
  161.  
  162.  
  163. On the uuencoding standard
  164. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  165. In my opinion, the uuencoding standard is not very well thought-out. As long
  166. as an encoded file consists of only one section (in the early days, splitting
  167. an encoded file up into more than one section was most probably not allowed),
  168. there is not much wrong with the standard, but as soon as the necessity rose
  169. for files to be split up, the standard should have been changed as well.
  170. To start with, there is no standard way of designating non-section parts,
  171. so the standard provides us with no means whatsoever to distinguish between
  172. encoded sections and mere comments. Also, the standard does not describe a
  173. way of deciding which sections belong together, nor in which order. Most
  174. uuencoders put such additional information in the files, but with the lack
  175. of a standard, almost every single one of them has its own way of doing this.
  176. A number of encoders will also put one or more checksums in the file, but
  177. again, this has not been standardised. It would have been very easy to devise
  178. a standard for adding such additional information, but it has not been done,
  179. and it may be far too late now...
  180.  
  181.  
  182. Command line parameters, switches, and environment
  183. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  184. Although the usage message says
  185.     UU [drive:][path]filename[.ext] [/1] [/A] [/D] [/I] [/K] [/O] [/S]  ,
  186. UU allows all kinds of variations on this: Instead of a slash ("/"), a dash
  187. ("-") is accepted as well. UU of course accepts both uppercase and lowercase,
  188. and ignores irrelevant blanks (spaces). Also, using a switch twice or more
  189. has the same effect as using it only once. Moreover, switches (currently, the
  190. switches are /1, /A, /D, /I, /K, /O, and /S) may be combined, and the order
  191. in which the filename and the switches (if any) appear on the command line is
  192. irrelevant. This means that, for instance, all of the following commands are
  193. treated identically:
  194.     UU example.uue /I /S
  195.     UU example.uue -I -S
  196.     Uu   exAmplE.Uue/s    -I
  197.     uu/s example.uue/i
  198.     uu example.uue -is
  199.     uu /is example.uue
  200.     uu example.uue /s/i
  201.     uu/i -sisssis example.uue
  202.  
  203. Please note that if the dash ("-") is used to identify a switch, it must be
  204. preceded by at least one blank, since DOS allows dashes also to be part of a 
  205. filename. Although DOS also allows a dash as the first character of a filename
  206. (yes!), UU will not accept an input file with such a name, so if files with
  207. such names are to be fed to UU, then they will have to be renamed first. Since
  208. dashes are allowed to be anywhere else in the filename, this means that the
  209. following two commands are NOT identical:
  210.     uu temp-i
  211.     uu temp/i
  212.  
  213. The former command processes a file called "temp-i" using no switches, while
  214. the latter will use the switch "i" on a file called "temp". So if the latter
  215. interpretation is meant, and one wants to use the dash, then make sure that
  216. at least one blank precedes it, as in:
  217.     uu temp -i
  218.  
  219. There is one exception to the rule that dashes must be preceded by at least
  220. one blank when used to identify a switch: If it is preceded by another switch
  221. or combination of switches, then the blank is not necessary. So the following
  222. command is treated identically to the ones listed at the start of this chapter:
  223.     uu/i-s example.uue
  224.  
  225. Starting with version 3.2, UU checks for the presence of an environment
  226. variable called UU. In this variable, one can specify the default parameter
  227. and/or switches. Although one could define this variable directly from the
  228. DOS prompt, one would usually put such a definition in the AUTOEXEC.BAT file.
  229. Suppose, for example, that one uses UU almost exclusively in combination with
  230. the /D, /I, and /S switches, then one could define the environment variable UU
  231. as follows:
  232.     set uu=/dis
  233. If one now enters the following command:
  234.     uu example.uue
  235. then this will be interpreted as if there were no environment variable UU,
  236. and one had entered the following command instead:
  237.     uu example.uue /dis
  238.  
  239. The contents of the environment variable UU are ADDED to the command line,
  240. so with the same settings for UU as above, the command
  241.     uu example.uue /k
  242. would be interpreted as:
  243.     uu example.uue /k /dis
  244.  
  245. The environment variable can be overridden by specifying an empty switch from
  246. the command line. Empty switches can be specified by entering a slash or dash
  247. followed by either nothing or at least one space. The following commands are
  248. all interpreted identically, and illustrate several ways of how to specify an
  249. empty switch:
  250.     uu / example.uue /o
  251.     uu/o example.uue/
  252.     uu //o example.uue
  253.     uu /-o example.uue
  254.     uu --o example.uue
  255.     uu -/o example.uue
  256.     uu - example.uue -o
  257.     uu example.uue /o-
  258.     uu example.uue -o -
  259. So when an empty switch is specified, the environment variable UU (if present)
  260. will be ignored.
  261.  
  262. Finally, please note that the environment variable may also contain a filename
  263. specification. For example:
  264.     set uu=c:\download\*.*/dks
  265.     set uu=/isd *.uue
  266.  
  267.  
  268. What UU does, and does not do
  269. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  270. UU is extremely fast, and is even faster when disk caches or RAM disks are
  271. used. To illustrate this, I have taken a large uuencoded file (5,915,740 bytes)
  272. containing only one part of 93,906 encoded lines, and I have ran UU on it in
  273. its fastest mode (i.e. without using any switches) while using different
  274. settings. Here is what I came up with on my system (i486DX2-66, VLB, 20 megs
  275. RAM, 256k cache):
  276.  
  277. Free memory  (kb)   19801  15673   9520  10004    788
  278. SMARTDRV     (kb)       0   4096  10240      0      0
  279. RAMDISK      (kb)       0      0      0  10240  19456
  280. -----------------------------------------------------
  281. time required (s)    17.5   16.3    8.4    4.8    4.8
  282.  
  283. This also illustrates that UU spends most of its time reading from and writing
  284. to disk (at least on my system), so using faster disk drives (network drives,
  285. for instance) can make UU faster yet.
  286.  
  287. UU is extremely robust: Since there is not a well-defined standard on the
  288. format of uuencoded files, or on how these should be split up, there are
  289. numerous small variations commonly used. The fact that uuencoding is used
  290. on most platforms makes things even more complex. (A more detailed description
  291. of the kinds of variations that one frequently sees in encoded files may be
  292. found in the remainder of this chapter.)  I have done my best to make sure
  293. the user does not have to worry about all this. Usually, the user only becomes
  294. aware of this if he tries other uudecoders, or if (god forbid) UU fails to
  295. uudecode a file correctly. I think I can safely say that there is no other
  296. decoder that can deal with so many variations in uuencoded files. I just wanted
  297. to have one single program that can deal with all common (and even uncommon)
  298. "types" of uuencoded files, and not need to choose between a lot of uudecoders
  299. every time there is a slight variation in the encoded files. If you do not
  300. believe me, just download a lot of uuencoded binaries from USENET, test all
  301. your uudecoders on the lot, and judge for yourself which decoder successfully
  302. decodes the most files...
  303.  
  304. Of course UU processes both UNIX style ASCII files and MS-DOS style ASCII
  305. files. In addition to this, UU also accepts Mac style ASCII files, as well
  306. as any mixture of all of these styles.
  307.  
  308. Frequently, files are encountered that have a blank line every other line.
  309. This is probably due to the fact that these have been posted from one platform
  310. to another without making the necessary adjustments. UU will process such
  311. files WITHOUT the need for the user to edit out all these blank lines.
  312.  
  313. Another mess-up that one sees every now and then, is that (probably because
  314. the poster had forgotten to turn off word wrapping) the "begin" line is split
  315. up into two lines. Starting with version 3.2, UU recognises this.
  316.  
  317. Unlike what I have seen in some other uudecoders, UU does NOT assume an
  318. extension of .UUE if no extension is given. This is for my own convenience,
  319. since most of the files I get to process have no extension.
  320.  
  321. Although UU was primarily designed to process many multi part uuencoded files
  322. all contained in *one* huge file, it can also deal with multiple input files
  323. through the use of wildcards. For more information on how UU deals with these,
  324. please refer to the chapter on wildcards. Since there is no real difference
  325. between UU's handling of single input files and multiple input files, in most
  326. of this manual I shall only talk about single input files.
  327.  
  328. The sections in the input file(s) need not be in the correct order at all if
  329. UU is used in its "unsorted sections" mode. For more information on unsorted
  330. sections, see the appropriate chapter in this manual.
  331.  
  332. If neither of the switches /I and /S are used (and ONLY then), UU does not
  333. allow sections to be in any other than increasing order in the file. (Again,
  334. please refer to the chapter on unsorted sections for information on how to
  335. handle these.)
  336.  
  337. UU always allows the source file to contain more than one uuencoded file, and
  338. each of these files may consist of any number of sections. If no switches are
  339. used, then these sections MUST be in the correct order. So in this case, a
  340. file containing the following sections:
  341.     <file 1 part 1>
  342.     <file 1 part 2 (last part)>
  343.     <file 2 part 1>
  344.     <file 2 part 2>
  345.     <file 2 part 3 (last part)>
  346. will be handled correctly by UU (and result in two files), whereas
  347.     <file 1 part 1>
  348.     <file 2 part 1>
  349.     <file 1 part 2>
  350.     <file 2 part 2>
  351.     <file 2 part 3>
  352. and
  353.     <file 1 part 2>
  354.     <file 1 part 1>
  355.     <file 2 part 1>
  356.     <file 2 part 3>
  357.     <file 2 part 2>
  358. will not. Again, this restriction does NOT apply when UU is told that the file
  359. may contain unsorted sections.
  360.  
  361. When used in the "sorted order" mode of operation, UU can handle any number of
  362. sections contained in one input file; there is no limit. The only thing that
  363. may happen (apart from your hard disk getting full), is that some of the
  364. numbers that UU displays will not be correct, but this only happens if the
  365. number of sections in one file exceeds 9999. (Yes, I know I used the number
  366. 65535 in a previous manual, but that was a mistake. That is what happens when
  367. you socialise with computers too much.)
  368.  
  369. If the program terminates or aborts after having detected some error, an
  370. ERRORLEVEL of 1 is returned; a successful termination results in ERRORLEVEL 0.
  371.  
  372. Some platforms do not have the restriction of filenames being only at most
  373. 8+3 characters long, so the filename in the header of the first section of
  374. an encoded file may not be DOS-compliant. UU recognises this, and prompts
  375. the user for a new filename.
  376.  
  377. Some platforms allow spaces in filenames. Although it is possible to create
  378. filenames containing spaces in DOS (earlier versions of UU would do just that,
  379. but only if DOS 5.00 or below was used), starting with version 3.0, UU will
  380. replace such spaces by underscores, as filenames containing spaces are just
  381. a pain to deal with for most people and programs -- try renaming such files,
  382. for instance... Yes, I know it is possible through the use of disk editors
  383. or wildcards, but it is more cumbersome than renaming files with "normal"
  384. names.
  385.  
  386. Some programs and/or systems chop off all trailing spaces from text lines
  387. in a misplaced attempt to save storage space (which is why most uuencoders
  388. nowadays use backquotes (`) instead of spaces). Starting with version 3.1,
  389. UU correctly decodes these stripped lines. Please note that this makes it
  390. possible that UU now decodes files that were considered corrupt before, and
  391. that sometimes, these files REALLY were corrupt, so the decoded file will be
  392. corrupt too. So realise that if a decoded file is corrupt, that the encoded
  393. file usually was corrupt to begin with. There is one exception, however:
  394. Suppose that an encoded file contains a line consisting only of an "M", and
  395. suppose that this line is NOT an encoded line, but some strange comment line.
  396. In this case, UU will think that the line is a chopped encoded line. In UU's
  397. "sorted order" mode of operation, this line will then wrongly be decoded,
  398. causing the decoded file to be corrupt. Fortunately, this will almost never
  399. happen; I have ran UU on many dozens of megabytes of encoded files, and the
  400. situation described here did not even occur once!  And even if the situation
  401. does occur, then please realise that in its "unsorted sections" mode of
  402. operation (so when using the switches /I and/or /S), this "section" will
  403. usually be skipped because it cannot be identified, so everything will still
  404. be alright then. For more information, please refer to the chapter on unsorted
  405. sections.
  406.  
  407. If the filename for an encoded file already exists, the user is informed of
  408. this, and may then choose to overwrite the old file (by pressing Y), rename
  409. the new one (by pressing N), or skip this file and proceed with the next file
  410. (if any) (by pressing S). At this point, CTRL-Break (and also CTRL-C) may be
  411. used to abort the process. Specify the /K switch if UU is to skip existing
  412. files without prompting. Specify the /O switch if UU is to overwrite existing
  413. files without prompting for confirmation. Note that the combination of these
  414. two switches is meaningless, so UU will issue an error message in this case.
  415.  
  416. If the /D switch is specified, UU will delete all input files that have been
  417. successfully processed. This also means that if the sections of some file that
  418. cannot be successfully processed are divided over multiple input files, then
  419. none of these input files will be deleted. Just like UU processes hidden and
  420. read-only files, the /D switch will also delete such files. Files that were
  421. skipped (either from specifying the /K switch, or from pressing S when UU
  422. asks to overwrite an existing file) also count as being successfully processed.
  423. Please note that there is a small difference between UU's handling of the /D
  424. switch in its "unsorted sections" mode and in its "sorted order" mode. To wit:
  425. In its "unsorted sections" mode (i.e. when using the /S switch), UU will delete
  426. only those input files of which ALL sections have been processed, and will NOT
  427. delete files that do not contain any sections. In its "sorted order" mode, UU
  428. will simply delete all files that have been successfully processed, so EVEN
  429. input files that do not contain any sections.
  430.  
  431. As opposed to some other uudecoders, UU does not choke on CTRL-Z characters.
  432.  
  433. UU ignores lines that are not uuencoded, typically before and after sections.
  434. I saw somewhere that a uudecoder written by someone else could be notified
  435. that (for example) "---" is not a decodable line, as it seems that this line
  436. is used as a cut line on several BBS systems. With UU, it is not possible to
  437. designate such a non-decodable line... merely because UU does not need that
  438. information to determine that a given line is not to be treated as a uuencoded
  439. line. UU uses four ways to determine whether a line is a mere comment or not,
  440. and treats the line as an encoded line only if all four ways show it is not a
  441. comment. These tests are partly performed simultaneously, and always in such a
  442. way as to require hardly any additional time (e.g. when the data required for
  443. a test is available due to some other action currently being performed).
  444.  
  445. Some uuencoders have the nasty habit of putting one lowercase alphabetic
  446. character at the end of every uuencoded line. (These characters are NOT part
  447. of the set of characters allowed in uuencoded lines.)  UU recognises this
  448. without losing any of its intelligence (as meant in the previous paragraph).
  449.  
  450. Although the "standard" requires the "end" line of a uuencoded file to be
  451. preceded by a line containing only either one space or one backquote (`),
  452. some programs and/or systems replace a one-space-line by an empty line.
  453. UU will also process such "illegal" files correctly.
  454.  
  455. Although UU is quite intelligent, it is possible to fool it, but I think that
  456. this is purely academic, for the chances of it being fooled are astronomically
  457. small (unless someone intentionally fooled UU). Even if one decoded hundreds
  458. of thousands of uuencoded files, it would most probably occur not even once
  459. that UU was fooled. And if it should ever occur that UU is fooled, then,
  460. please, do not blame UU or me, but blame the one who invented the uuencoding
  461. standard for not making it more strict. Or, put in another way: All uudecoders
  462. can be fooled, but mine must be one of the most reliable ones as I can easily
  463. show by a simple computation of probabilities. Of course, UU cannot perform
  464. miracles, so if the uuencoded file is corrupt to begin with, UU will be
  465. helpless too. But... UU should NEVER actually crash on corrupt files.
  466.  
  467.  
  468. UUTool-encoded files
  469. ~~~~~~~~~~~~~~~~~~~~
  470. Starting with version 3.2, UU also accepts files created by a program called
  471. UUTool (which is used on the Apple Macintosh). This is all you need to know
  472. about it, since UU does not act any differently towards you if it encounters
  473. such files. So the remainder of this chapter is meant only for those who
  474. nevertheless want to know a bit more about these files:
  475.  
  476. As opposed to "standard" uuencoded files, UUTool-encoded files also contain
  477. lowercase characters. The following is a typical UUTool-encoded line:
  478.  
  479. Mj\LIXg\oOpn^HYFnecgo^TnUjvatY^=<\xJoazRnfoiaHne;frmOfnQIvcFy
  480.  
  481. Another, perhaps easier way to spot such files, is to look at the header of
  482. the first section of the encoded file. As far as I know, UUTool is the only
  483. encoder that uses "0700" for the UNIX file access code. As in:
  484.  
  485. begin 0700 This is a valid filename on the Mac
  486.  
  487. To accomodate Mac users, UUTool-encoded files often also contain a small file
  488. called .rsrc, and sometimes also another file called .finfo -- these files will
  489. be of no value in a DOS environment, so UU will automatically skip these if it
  490. encounters them.
  491.  
  492.  
  493. Handling unsorted sections
  494. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  495. UU can also handle files containing randomly ordered sections. For this mode
  496. of operation, two switches are available: /I and /S. When invoked with /I only,
  497. UU will scan the source file, and it will subsequently report what it has found
  498. there, but it will not actually decode anything. When invoked with both /I and
  499. /S (or any equivalent notation -- see the chapter on command line parameters
  500. and switches), it WILL start decoding after having reported the information.
  501. A less verbose, but equally efficient result is obtained by specifying only
  502. the /S switch.
  503.  
  504. If the /I switch is specified, but not the /S switch, then specifying one or
  505. more of the switches /D, /K, and /O does not make much sense. In these cases,
  506. UU will act as if only the /I switch had been specified. In particular this
  507. means, that in these cases UU will not write or delete anything.
  508.  
  509. There is a maximum to the number of sections that UU can handle using this
  510. "unsorted sections"; more details may be found later in this chapter.
  511.  
  512. This mode of operation, however still very fast, is slower than the "sorted
  513. order" mode. Starting with version 3.1, the order in which the sections appear
  514. does not matter as far as speed is concerned; the "unsorted sections" mode
  515. takes approximately twice as long as the "sorted order" mode (versions before
  516. 3.1 would take AT LEAST twice as long, but often longer), but the difference
  517. may be less on systems using disk caches.
  518.  
  519. Since the "sorted order" mode uses one very powerful assumption (viz. the
  520. sections being in sorted order), whereas the "unsorted sections" mode can (at
  521. best) only rely on whatever information it filters out of the source file, it
  522. is possible for UU to obtain better results in the former mode. So I recommend
  523. using the "sorted order" mode whenever one is sure that every section appears
  524. in the correct order (which, as noted earlier, also is faster). However, one
  525. should realise that in very rare cases, UU may "think" that a line is encoded
  526. when in fact it is not. This will typically happen with a text line that starts
  527. with an "M", has a length of at most 61 characters, and contains no lowercase
  528. characters (all these conditions should be satisfied). The "sorted order" mode
  529. will then decode this line, so the decoded file will be corrupt. The "unsorted
  530. sections" mode would just skip this "section" because there is not sufficient
  531. information available on it. Note that the line does not have to have a length
  532. of 61 for this to happen, since it will be considered as a line from which
  533. trailing spaces have been stripped if the length is less than 61.
  534.  
  535. So how does UU obtain its information?  The current version of UU recognises
  536. some 35 different uuencoders and posting programs. (For the ease of discussion,
  537. I shall use the term "uuencoders" whenever I mean "uuencoders and/or posting
  538. programs" in the remainder of this manual.)  These include uuencoders used on
  539. PCs, UNIX systems, Macintoshes and Amigas. Below follows a list of (some of)
  540. the uuencoders supported by UU:
  541.  -  EnUU, versions 1.3, 1.4, 1.5, 1.6, and 2.02 by Marko Pinteric
  542.  -  Hermes FILESERV by Martin P. Ibert
  543.  -  POST, versions 1.1.0 through 2.0.0 by John W.M. Stevens
  544.  -  post-bin, revision 2.2.2 by Terry W. Thero (REV 2.2 by Rich Thomson)
  545.  -  QUUNCD Ver. 1.4 by Theodore A. Kaldis
  546.  -  SplUU V01.16 beta by Psilocybe Systems Inc.
  547.  -  spluum v1.2 by Benjamin J. Walbeehm
  548.  -  UU-ENCODE, versions 4.02 through 5.27 by Richard E. Marks
  549.  -  UUCODE, versions 2.0 through 3.0 by Sabasoft, Inc.
  550.  -  UULite version 1.6 by Jeff Strobel
  551.  -  UUMaster V4.01 by Philippe Gresse
  552.  -  UUQ version 0.6 by Benjamin J. Walbeehm
  553.  -  UUSPLIT version 1 by David Uy
  554.  -  UUTool version 2.32 by Bernie Wieser
  555.  -  UUXFER ver 2.0 by David M. Read
  556.  -  Wincode, versions 1.2, 1.4, 1.5, 2.2, and 2.3 by George H. Silva
  557.  -  WinVN, versions 0.90.4 through 0.91.3 by Mark Riordan, Sam Rushing, and
  558.         many others
  559.  -  xmitBin, versions 1.8 and 1.9 by D. Jim Howard
  560. Please note that there are many more uuencoders and version numbers of these
  561. that are recognised as well by UU, so this list is far from complete. I have
  562. listed only the ones that I know by name, and only the version numbers of which
  563. I am sure that UU supports them. I just do not have all versions of all these
  564. programs, nor uuencoded files produced by all these. Two final notes on the
  565. above list:
  566.  -  UUQ has not been released yet!
  567.  -  UUXFER does not always indicate the correct total number of sections,
  568.     but UU will nevertheless process files encoded by UUXFER correctly!
  569.  
  570. If it cannot recognise the uuencoders that were used, or if these have not
  571. included all of the necessary information in the file, UU tries to use the
  572. "Subject:" lines (if it finds any) that may be included if the file contains
  573. postings from USENET. Instead of "Subject:" lines, some newsreaders produce
  574. "Description:" lines; these are also supported by UU. In the remainder of this
  575. manual, I shall no longer refer to "Description:" lines, but whatever holds
  576. for "Subject:" lines, also applies to "Description:" lines.
  577.  
  578. If postings from USENET are used, I recommend NOT chopping off the headers
  579. (and thus the "Subject:" lines) for a higher chance of success. "Subject:"
  580. lines are used only if all else fails, because of the higher chance of these
  581. containing errors. For instance, someone may have erroneously given a five part
  582. file a subject line of "EXAMPLE.ZIP (4/6)" indicating that there are six parts.
  583. But even when things like this happen, there is a good chance that UU will
  584. successfully decode these files all the same. In particular, this means that
  585. UU will usually successfully decode a file containing a series of postings
  586. with "Subject:" lines such as the following:
  587.     Subject: niceprog.exe (2/3)
  588.     Subject: niceprog.exe (1/3)
  589.     Subject: niceprog.exe (3/4). Sorry, there are four parts!
  590.     Subject: niceprog.exe (4/4)
  591. Note that this is only an example; all kinds of variations (and also when
  592. there actually are LESS parts than the poster originally indicated) of this
  593. will usually be processed correctly by UU as well. To end this subject (no pun
  594. intended), some examples of "Subject:" lines, and how they will be processed
  595. by UU:
  596.  -  Subject: EXAMPLE.ZIP (4/6)
  597.       UU sees this as part four of a six part file called EXAMPLE.ZIP.
  598.  -  Subject: Re: PICTURE.GIF {Just another picture} [01/10]
  599.       As expected, UU will see this as part one of a ten part file called
  600.       PICTURE.GIF.
  601.  -  Subject: Repost:AGAIN.EXE(Part3of20).Reposted on popular demand.
  602.       Yes, UU will assume it is dealing with part three of a twenty part file
  603.       called AGAIN.EXE.
  604.  -  Subject: >FOOBAR.JPG (b/w) {Another picture} (part 3/5.
  605.       UU is not fooled by "(b/w)", nor by the ">"; it will correctly assume
  606.       this is part three of a five part file called FOOBAR.JPG.
  607.  -  Subject: - FooBar.Jpg {Another picture /0 }   part04 of5}  (6 /w ).
  608.       Even this does not fool UU; it assumes to be dealing with part four of a
  609.       five part file called FooBar.Jpg. Moreover, UU will see this as a further
  610.       part of the same file as in the previous example.
  611. Although these examples show that UU is quite "intelligent" while dealing with
  612. these lines, I realise that my "Subject:" line parser still leaves room for
  613. improvement. Either way, the name it finds in the "Subject:" line is not all
  614. that important since the name of the file also appears in the header of the
  615. first section of a uuencoded file. And most of the time (so even when it comes
  616. up with false information from the "Subject:" line), it will yield a correct
  617. result anyway.
  618.  
  619. And while on the subject of filenames: Most of the uuencoders also include
  620. some form of file identification at the start of each (so not only the first)
  621. section, one way or another. For at least some of them, it may be the case
  622. that this "name" differs from the one that is in the header of the first
  623. section. And of course, this is also possible for the name UU filters out
  624. of the "Subject:" line. That is why, when using the /I switch, UU will give
  625. two names for each section it finds. The real name (i.e. the one from the
  626. "begin" line of the first section) is the one that is NOT parenthesised.
  627. And although UU will display the names exactly as they appear in the file,
  628. it will perform a case-insensitive comparison between these names, thus making
  629. up for capitalisation inconsistencies by the person who posted the file.
  630.  
  631. As mentioned earlier, there is a limit to the number of sections that UU can
  632. handle when dealing with unsorted sections. Starting with version 2.6, this
  633. number depends on the lengths of the filenames it finds in the input file.
  634. This is because of the fact that starting with version 2.6, UU stores those
  635. filenames in memory dynamically, which means that instead of using a fixed
  636. amount of bytes for each filename, it now uses only the amount of bytes it
  637. actually needs for each filename. If, for instance, the average length of
  638. the filenames (including the ".") is 12, then the maximum number of sections
  639. UU will allow is 862. But also note that no matter how short the filenames
  640. are, UU will never allow more than 999 unsorted sections.
  641.  
  642. Because of the fact that UU may filter the wrong name out of the "Subject:"
  643. line, it is possible that it comes up with the same name for two or more files
  644. in case there are several files contained in the input file. If UU cannot find
  645. sufficient information from the uuencoder that was used, this may then lead to
  646. less successful results than would result if each file were contained in an
  647. input file of its own. Stated differently: It is possible that two files that
  648. would each be processed correctly by UU, will no longer yield a successful
  649. result after they have been concatenated. In particular, this means that when
  650. the same file occurs twice in the input file, it will be processed only once.
  651.  
  652. Also when using the /I switch, UU will give the section number and the total
  653. number of sections (as far as this could be determined of course) for each
  654. section it finds. This is displayed as in "(003/010)", which would mean that
  655. this section is part three of a ten part file. Whenever a number could not be
  656. determined, "000" is printed instead. Finally (still when using the /I switch
  657. only), UU displays some information on any section it will not be able to
  658. process, as well as the reason for this.
  659.  
  660. The remainder of this chapter holds for both the /I and /S switches: Whenever
  661. a filename that was encountered is longer than twelve characters, it will be
  662. displayed to the first eleven characters only, with an asterisk (*) appended
  663. to it. Of course, the full name will be displayed when prompting the user for
  664. a new filename, and UU will also use the full name in all internal operations.
  665.  
  666. When UU has scanned the input file, it will list the names, and numbers of
  667. sections of each COMPLETE file it has found. It also gives the total number
  668. of sections it has found, the number of sections it could not identify, and
  669. the number of sections that may be processed. Note that the latter number is
  670. not necessarily the difference of the former two, because there are various
  671. reasons that a section that WAS identified cannot be processed after all (for
  672. example when there are other sections of the same file missing). The actual
  673. reason will usually be given while using the /I switch. If UU does not give
  674. a reason, this usually means that one or more sections appear twice or more.
  675.  
  676. I have done my very best to make UU as smart as possible, but as noted earlier,
  677. due to the fact that the uuencoding standard is not strict enough, even the
  678. most intelligent uudecoder may not be able to correctly figure everything out.
  679. Let me end this chapter by quoting Nick Viner: "Of course some files which have
  680. been split by hand and not labelled adequately will always defeat it!"
  681.  
  682.  
  683. Handling wildcards
  684. ~~~~~~~~~~~~~~~~~~
  685. UU accepts wildcards * and ?, and has two switches (/1 and /A) specifically
  686. related to this. Basically, if a file specification containing wildcards is
  687. used, then UU will act as if the files matching this specification were all
  688. contained in one large file. As with single files, each of these matching
  689. files may contain multiple multi part files. If the matching files are to
  690. be processed fully independently of one another, then use the /1 switch.
  691. There is one exception however to the assumption of seeing all these files as
  692. if they were contained in one large file: In case UU is used in its "unsorted
  693. sections" mode (by using the /I and/or /S switches), then each section should
  694. be identifiable. Suppose, for example, that some file has been uuencoded into
  695. one single section. If one were to manually split this section into two parts,
  696. and save each of these to a different file (say PART1.UUE and PART2.UUE),
  697. then UU will not be able to identify PART2.UUE, so invoking UU with
  698.     UU/IS PART?.UUE
  699. will not make UU decode anything. So don't split up sections... Please note
  700. that if somebody has split up a large uuencoded file by hand, and has posted
  701. each of these parts to USENET, then there is a good chance that each of these
  702. parts *will* be identifiable, because the posted parts will have several useful
  703. headers (such as "Subject:" lines). The requirement that all parts have to
  704. be identifiable of course only applies to UU's "unsorted sections" mode of
  705. operation.
  706.  
  707. Usually, the matching files are processed in the order in which they appear
  708. in the directory, but UU can be forced to handle these files in alphabetical
  709. order by specifying the /A switch. Please note that it does not make much
  710. difference whether or not this switch is used when either or both of the
  711. switches /I and /S are used as well. To wit, the switches /I and /S force
  712. UU to examine all matching files first, and then determine the order in which
  713. all sections of all matching files are to be handled, so the order in which
  714. these matching files are examined is irrelevant. So the /A switch is only
  715. really useful when neither of the switches /I and /S are used. Let us assume
  716. that your directory contains the following files (in the listed order):
  717.     FILE2.UUE
  718.     FILE3.UUE
  719.     FILE1.UUE
  720. Then,
  721.     UU FILE?.UUE
  722. will process these files in that order, whereas
  723.     UU FILE?.UUE /A
  724. will start with FILE1.UUE, then proceed with FILE2.UUE, and finally process
  725. FILE3.UUE. Note that in UU's "sorted order" mode of operation (where files
  726. are *not* examined first), sections need not be identifiable, so if one were
  727. to uuencode a file into one section, and then manually split up this encoded
  728. file into files containing only one line each (let us assume there are 999
  729. lines, and line 1 is written to a file called LINE.001, line 2 to LINE.002,
  730. etc.), then
  731.     UU LINE.* /A
  732. will correctly decode it (as will 
  733.     UU LINE.*
  734. if the files appear in the correct order in the directory).
  735.  
  736. Note that combining the /1 and /A switches in both UU's "sorted order" and its
  737. "unsorted sections" modes of operation does not make much sense, since UU will
  738. only terminate successfully if each of the input files is decodable by itself.
  739. Or stated differently (using the above example with the files FILE2.UUE,
  740. FILE3.UUE, and FILE1.UUE): No matter which additional switches (if any)
  741. you use, the command
  742.     UU FILE?.UUE /X /1
  743. is just an abbreviation for
  744.     UU FILE2.UUE /X
  745.     UU FILE3.UUE /X
  746.     UU FILE1.UUE /X
  747. (where /X represents all additional switches). And clearly, there is no
  748. difference as to the order in which these commands are given... Well, that
  749. is not entirely true as there IS a difference in case the /O switch is used
  750. as well, and -- at the same time -- there is some file that appears two times.
  751. Suppose, for example, that both FILE1.UUE and FILE2.UUE contain a file called
  752. EXAMPLE.ZIP. Then after having used the switch combination /1AO, EXAMPLE.ZIP
  753. will be the one that was contained in FILE2.UUE, whereas the combination /1O
  754. yields the EXAMPLE.ZIP from FILE1.UUE. The way I see it is that UU simply
  755. offers a number of switches, and that it is up to the user to decide whether
  756. or not certain combinations are useful. And of course, nobody is forced to
  757. actually use all the options UU offers.
  758.  
  759. Finally, a word of advice on using wildcards: If you do not want to spend too
  760. much time on USENET, then I suggest you collect all the binaries you want in
  761. a few files, don't bother about it if the sections are not all contained in
  762. one and the same file, and then run UU on these files using wildcards and
  763. the /I and /S switches (e.g. "UU/IS P*"), but please remember that in this
  764. mode, there still is the varying limit (as explained earlier) on the number
  765. of sections: In case the /1 switch is used, each of the input files may not
  766. contain more sections than this limit, and in case the /1 switch is not used,
  767. then the sum of the numbers of sections of all input files may not exceed this
  768. limit.
  769.  
  770.  
  771. Plans for the next version (3.3) of UU
  772. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  773. I plan to add a switch that will make UU convert "illegal" filenames to
  774. DOS-compliant ones. In combination with the /D, /K, and /O switches, this
  775. would enable the user to let UU do its job without ever being asked by UU
  776. to answer some questions before it can continue.
  777.  
  778. I think I am going to work on my uuENcoder first though. The current prototype
  779. (UUQ version 0.6) is faster than any of the uuencoders I know, and I expect the
  780. first public version (1.0) to be faster yet. People who are subscribed to the
  781. UU mailing list will receive a copy of UUQ as soon as it is released.
  782.  
  783.  
  784. Plans for the more distant future
  785. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  786. I can think of several ways of making UU even smarter. For instance, by adding
  787. support for even more uuencoders (if I find any). Another option is to have UU
  788. use the information it gathers but does not use so far, so as to have it make
  789. its own assumptions about sections that could only be partially identified.
  790. The latter case would then be as if UU said "These sections probably belong
  791. together... well, let's assume they do, and process them.". Finally, the
  792. routine that deals with USENET's "Subject:" lines could be made yet a little
  793. smarter.
  794.  
  795. I think it would be nice if the user could choose to manually change the
  796. "Subject:" lines, thus being able to correct for parts that have not been
  797. labelled adequately.
  798.  
  799. Another option I plan to add, is to have UU be able to write every section
  800. that has not been processed to a separate file. Related to this would be an
  801. option to have UU output all non-encoded data.
  802.  
  803. By using code that runs only on an 80386 or higher, I could make UU yet a bit
  804. faster; I may release such a version one day. Or better yet: I could have UU
  805. auto-detect the processor, and include processor specific code for the most
  806. time critical routines.
  807.  
  808. By using XMS (or EMS) memory for additional buffering, I could make UU yet a
  809. bit faster.
  810.  
  811. Some uuencoders put checksums in the files. I may have a future version of UU
  812. be able to check these.
  813.  
  814. I may also add support for xxencoded files to UU.
  815.  
  816.  
  817. Acknowledgements
  818. ~~~~~~~~~~~~~~~~
  819. I should like to thank the following persons:
  820.  -  Terry O'Brien for sending me detailed information on the file mode code
  821.     in the header of uuencoded files, and on uuencoding in general.
  822.  -  Martin Jones for telling me about a bug :-( in version 1.1 (and 1.0).
  823.  -  Brian Norris for telling me about a bug :-( in version 1.3 (and earlier
  824.     versions).
  825.  -  Douglas Swiggum for all the trouble taken in sending me "strange" uuencoded
  826.     files, and detailed descriptions of what happened. You have saved me a lot
  827.     of time in finding two bugs :-( in version 2.0!
  828.  -  Anders Jarnberg for describing exactly what happened while using versions
  829.     2.0 and 2.1 under OS/2.
  830.  -  Mike Laskey for telling me about the problems under OS/2, and for testing
  831.     some preliminary versions of UU 2.2 under OS/2.
  832.  -  Roger Champagne for making me reconsider the way version 2.5 (and earlier
  833.     versions) handled blank lines.
  834.  -  Robert Bleidt for sending me a file that made me realise that some files
  835.     that were considered corrupt by UU 2.5 and earlier versions (and still are
  836.     considered corrupt by almost every other uudecoder) are correctly decodable
  837.     after all. Thanks also for reminding me that filenames containing spaces
  838.     (although they *can* be created) are not easily dealt with under DOS.
  839.  -  David Bunch for sending me the line that in a modified form is used in the
  840.     UUW.BAT batch file that was included in the UU 2.6 package. Yes, I know it
  841.     has been a while since you sent me that line, but I kept forgetting to
  842.     include it in the package...
  843.  -  Hoa Nguyen for contributing the UUD.BAT batch file that was included in the
  844.     UU 2.6 package.
  845.  -  Marko Pinteric for making sure that his uuencoder (EnUU) would be supported
  846.     by UU.
  847.  -  Paul Erickson, John Gotts, and Bryan Woodworth for their help in setting up
  848.     a mailing list for UU.
  849.  -  Michael Eilers, David Farley, Spencer Hochstetler, Allan Hudgins, Martin
  850.     Ibert, Eric Johansson, Alex Law, Rufus P., Terry Thero, Anthony Trippe,
  851.     David Uy, and Rene Walter for helping me find the names of some of the
  852.     uuencoders UU recognises.
  853. Last but not least, I should like to thank all the people who have let me
  854. know they appreciate my program, or otherwise (e.g. by telling me about bugs,
  855. or suggesting new features) mailed me regarding UU.
  856.  
  857.  
  858. Release history
  859. ~~~~~~~~~~~~~~~
  860. In my convention of version numbers, 0.x versions denote usually unreleased
  861. prototype versions.
  862.  
  863. Versions 0.1 through 0.4, and 0.6 were private, unreleased versions, written
  864. in a mixture of Pascal and assembly language.
  865. Version 0.5 was given to but a few people to see how they liked it. It had
  866. resulted from a process of stepwise refinement in which speed, size, feedback,
  867. and user-friendliness were tackled. Versions 0.1 through 0.5 were all written
  868. on 11-Dec-93. They were EXE files, and the latter had a size of 5872 bytes.
  869.  
  870. UU 0.6   Type: EXE   Size: 3424   Date: 14-Dec-93
  871.     The last prototype version. Most of it written in assembly. Yet a bit
  872.     faster than 0.5.
  873.  
  874. UU 1.0   Type: COM   Size: 1993   Date: 15-Dec-93
  875.     The first publicly released version. But for some tiny details this is
  876.     the full-assembly version of 0.6.
  877.  
  878. UU 1.1   Type: COM   Size: 1965   Date: 18-Dec-93
  879.  -  Even smarter in distinguishing comment lines from encoded lines (a fourth
  880.     test has been added).
  881.  -  Sections containing only one non-empty line are now recognised as such.
  882.  -  Detects when the disk is full, upon which it aborts with an appropriate
  883.     message.
  884.  -  Yet a bit faster than 1.0.
  885.  
  886. UU 1.2   Type: COM   Size: 1896   Date: 23-Dec-93
  887.  -  Now really only accepts "y", "Y", "n", and "N" while asking permission to
  888.     overwrite an existing file. Also, CTRL-Break (and CTRL-C) can be used at
  889.     this point to abort the program immediately.
  890.  
  891. UU 1.3   Type: COM   Size: 1892   Date: 25-Dec-93
  892.  -  In earlier versions, lines of more than 255 characters COULD (although it
  893.     is HIGHLY improbable they actually WOULD) result in decoded files being
  894.     corrupted; starting with this version, this can no longer happen.
  895.  -  Yet a bit faster than 1.2 (amongst others (but not only!) because the read
  896.     and write buffers now each are 4k larger).
  897.  
  898. UU 2.0   Type: COM   Size: 5866   Date: 09-Jan-94
  899.  -  Now also allows files containing unsorted sections.
  900.  -  An intelligent command line parser has been added. Because of this, the bug
  901.     of UU not accepting filenames of length 1 in the command line (in fact, I
  902.     did not even know about this bug until some time after I had finished the
  903.     parsing routines) no longer exists.
  904.  -  Aborts with an appropriate message if there is not enough (conventional)
  905.     RAM free.
  906.  -  Displays an error message when invoked without any parameters or switches.
  907.  
  908. UU 2.1   Type: COM   Size: 6257   Date: 17-Jan-94
  909.  -  I really thought I had solved the problem of lines containing more than
  910.     255 characters in version 1.3, but I had not; now, it is REALLY fixed.
  911.  -  Added support for five more uuencoders and posting programs.
  912.  -  In addition to "Subject:" lines, "Description:" lines are now supported
  913.     as well.
  914.  -  Made the parser for "Subject:" (and "Description:") lines even more
  915.     intelligent.
  916.  -  Fixed a bug that seemed to matter only when run from the DOS box under
  917.     Windows.
  918.  -  The maximum number of unsorted sections UU can handle is slightly higher
  919.     (434 instead of 387).
  920.  -  Some minor changes not worth mentioning.
  921.  
  922. UU 2.2   Type: COM   Size: 6453   Date: 29-Jan-94
  923.  -  Faster than all previous versions, even more so (due to a bit of manual
  924.     code optimisation I performed) for those lucky few owning a Pentium.
  925.  -  Now recognises corrupt final sections (which could cause UU to crash in
  926.     earlier versions).
  927.  -  The "Subject:" line parser is yet a bit smarter.
  928.  -  A bit smarter in recognising the uuencoders and posting programs.
  929.  -  Also a bit smarter in making up for errors in the "Subject:" line.
  930.  -  And also a bit smarter in recognising false "begin" lines.
  931.  -  Supports five more uuencoders and posting programs.
  932.  -  Now also runs from the DOS box under OS/2.
  933.  -  Sections containing only an empty line followed by the end marker are now
  934.     recognised as such.
  935.  -  While working on the previous point, I discovered and fixed a bug: Previous
  936.     versions did not handle very short encoded lines correctly; they would
  937.     cause a file to be one byte too short.
  938.  
  939. UU 2.3   Type: COM   Size: 6450   Date: 13-Feb-94
  940.  -  Still as fast as version 2.2, although UU now also runs on 8086 and 8088
  941.     processors.
  942.  -  Now also accepts files created by uuencoders that put one lowercase letter
  943.     at the end of every uuencoded line -- previous versions of UU would either
  944.     crash, or come up with a resulting file of 0 bytes in these cases.
  945.  -  Yet another five additional uuencoders and posting programs are supported.
  946.  -  Some internal changes were made to make UU smaller; without these changes,
  947.     this version would have been over 300 bytes larger.
  948.  
  949. UU 2.4   Type: COM   Size: 6470   Date: 03-Mar-94
  950.  -  Previous versions of UU would sometimes not handle filenames of longer
  951.     than 28 characters correctly -- this has been fixed now.
  952.  -  Discovered and fixed a bug that by some weird coincidence never seemed to
  953.     matter.
  954.  -  Some tiny changes not worth mentioning.
  955.  
  956. UU 2.5   Type: COM   Size: 6490   Date: 13-Mar-94
  957.  -  Version 2.4 would sometimes display "strange" filenames (viz. a digit
  958.     followed by a blank, followed by the real filename). Fixed.
  959.  -  In some other cases, UU would produce a filename of length zero when this
  960.     should not have been the case -- this has now been fixed.
  961.  
  962. UU 2.6   Type: COM   Size: 6695   Date: 07-Apr-94
  963.  -  In addition to DOS style ASCII files and UNIX style ASCII files, Mac
  964.     style ASCII files are now accepted as well.
  965.  -  Fixed a tiny bug that on some occasions would display section numbers
  966.     that did not start at 1 in UU's "sorted order" mode of operation.
  967.  -  Blank lines in encoded sections are now ignored, so UU now correctly
  968.     decodes postings that have a blank line following every "normal" line.
  969.  -  Some files that were considered corrupt before (and still are considered
  970.     corrupt by almost every other uudecoder!), will now be decoded correctly.
  971.  -  Filenames are now stored in memory dynamically, thus usually allowing much
  972.     more unsorted sections (usually well over 800 sections, but at most 999).
  973.  -  One more uuencoder is supported.
  974.  -  Several (other) internal changes were made in preparation for version 3.0.
  975.  
  976. UU 3.0   Type: COM   Size: 7614   Date: 26-Apr-94
  977.  -  Now also accepts wildcards. Related to this, two new switches (/1 and /A)
  978.     were added. The files UUW.BAT and UUD.BAT that were contained in the
  979.     package of version 2.6 have thereby become superfluous.
  980.  -  Added a new switch /O for overwriting existing files without confirmation.
  981.  -  Although the standard requires the "end" line to be preceded by a line
  982.     containing only a space or a backquote (`), UU does no longer require it,
  983.     since there are programs/systems that replace this line by an empty one.
  984.     This change was also made in preparation for version 3.1.
  985.  -  Some systems allow spaces in filenames. Although it is possible to create
  986.     filenames containing spaces in DOS (earlier versions of UU would do just
  987.     that, but only if DOS 5.00 or below was used), UU will now replace such
  988.     spaces by underscores.
  989.  -  A small program (FROMMAC.EXE) is included in the package to deal with
  990.     files produced by a Mac program called UUTool.
  991.  -  One more uuencoder is supported.
  992.  
  993. UU 3.1   Type: COM   Size: 8318   Date: 24-May-94
  994.  -  Faster than all previous versions, and even more so if it can use one or
  995.     more extra buffers: UU still requires very little memory to run, but it
  996.     will put all additionally free conventional RAM (if any) to good use now.
  997.  -  Usually much faster in its "unsorted sections" mode, because the order in
  998.     which the sections appear now is irrelevant as far as speed is concerned.
  999.     Even when the sections appear in reversed order (which was the worst case
  1000.     for previous versions), UU is still as fast as in the best case now.
  1001.  -  Some programs and/or systems chop off all trailing spaces from text lines
  1002.     in a misplaced attempt to save storage space (which is why most uuencoders
  1003.     nowadays use backquotes (`) instead of spaces). UU now correctly decodes
  1004.     these stripped lines.
  1005.  -  Added a new switch /D for having input files that have been SUCCESSFULLY
  1006.     processed deleted.
  1007.  -  Added a new switch /K for skipping existing files without prompting.
  1008.  -  Files that already exist may now be skipped by pressing "S" when UU
  1009.     prompts for it.
  1010.  
  1011. UU 3.2   Type: COM   Size: 8624   Date: 19-Jun-94
  1012.  -  Defaults can now be specified in an environment variable ("UU").
  1013.  -  Now correctly decodes files of which the "begin" line is split up into two
  1014.     lines.
  1015.  -  Now also decodes files encoded by a Mac program called UUTool. The FROMMAC
  1016.     program that was contained in the UU30 and UU31 packages, has thereby
  1017.     become superfluous.
  1018.  -  Four more uuencoders (one of which is UUTool) are supported.
  1019.  -  Several small cosmetic changes were made.
  1020.  
  1021.  
  1022. How to get on the UU mailing list
  1023. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1024. If you want to receive a (ZIPped and uuencoded) copy of UU by e-mail every
  1025. time a new version is released, here is what you should do:
  1026.  
  1027. Send an e-mail with the subject line "Subscribe UU mailing list" to
  1028. Walbeehm@fsw.ruu.nl, and make it have the following contents (I am using
  1029. myself as an example here):
  1030.  
  1031. Name: Ben Jos Walbeehm
  1032. Address: Walbeehm@fsw.ruu.nl
  1033. Country: The Netherlands
  1034.  
  1035. The reason I want to know which country you live in (no, it can not always be
  1036. determined from the e-mail address), is merely because I am interested in the
  1037. usage statistics of my program. Note that you have to explicitly specify the
  1038. e-mail address you want copies of my uudecoder to be sent to. And since I am
  1039. having some small program I wrote take care of dealing with the subscriptions
  1040. (to save myself time), mails that do not have at least all four "ingredients"
  1041. (i.e. subject line, name, address, and country) will be ignored.
  1042.  
  1043. Once you have been put on the mailing list, an acknowledgement will be sent
  1044. to the address you specified at "Address:". It will contain some more details
  1045. as well. This acknowledgement should take at most a few days; if you have not
  1046. received it a week after you have sent your mail, please try again.
  1047.  
  1048. Oh yes (this is VERY IMPORTANT), as you probably know, all I ask in return for
  1049. my program is a short e-mail telling me you are using it. Your subscription to
  1050. the mailing list does NOT count as such...
  1051.  
  1052. Finally: I am providing this service for free, but since I have to pay for the
  1053. account I run the mailing list from, I actually lose money on it. I absolutely
  1054. *HATE* to charge any money for UU, so I am going to look how everything runs
  1055. first without asking any money for it. I actually have to pay for connect time,
  1056. but I have no idea how long it takes to process the mailing list, so I may feel
  1057. forced to ask a very small contribution (at most two or three dollars for as
  1058. long as the mailing list will be in existence) in the future, but I shall try
  1059. not to. If ever I do, you will all get the chance to unsubscribe from the list
  1060. first. :-)
  1061.  
  1062.  
  1063. Contacting the author        <--  Hey, that's me!  :-)
  1064. ~~~~~~~~~~~~~~~~~~~~~
  1065. Contact me (preferably using e-mail) if you have any questions, suggestions,
  1066. remarks, etc., on this document, on UU, or on any other of my programs.
  1067. Also, if you find a valid uuencoded file that UU does not process correctly,
  1068. please let me know. And if at all possible, pray send that file along to me
  1069. (or otherwise a detailed description of its contents). If you do send me a
  1070. file, please send it to my second account (Walbeehm@kali.cc.ruu.nl), because
  1071. the first one will most probably screw the file up before it actually gets to
  1072. me. Thank you very much!
  1073.  
  1074. I check the alt.binaries.pictures.misc and alt.binaries.pictures.utilities
  1075. newsgroups on USENET regularly, so you could also try placing messages for
  1076. me there. Finally, please send me an e-mail if you think my program is of
  1077. use to you (or flame me if you think it is useless). If I do not get enough
  1078. feedback, I take it that people are not interested, and I shall... continue
  1079. writing programs for myself, but DIScontinue spreading them on anything but
  1080. a very small scale.
  1081.  
  1082. Ben Jos  Walbeehm        (Please get my first name right, it is "Ben Jos".)
  1083. Lijsterbeslaan 20
  1084. 5248 BB  Rosmalen
  1085. The Netherlands
  1086. Phone : +31 4192 14345   (The best time (GMT) to get hold of me is at night!)
  1087. E-mail: Walbeehm@fsw.ruu.nl      (Monday through Friday)
  1088. E-mail: Walbeehm@kali.cc.ruu.nl  (7 days a week, but I have to pay for it)
  1089.