home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols200 / vol295 / unarc12.lbr / UNARC.DQC / UNARC.DOC
Text File  |  1988-04-29  |  25KB  |  595 lines

  1. File:     UNARC.DOC
  2. Subject:  User Documentation for UNARC Program
  3. Version:  1.2
  4. Date:     June 24, 1986
  5. ------------------------------------------------------------------------------
  6.  
  7.  
  8.                                     UNARC
  9.  
  10.                      CP/M Archive File Extraction Utility
  11.  
  12.  
  13.                     Copyright (C) 1986 by Robert A. Freed
  14.                              All Rights Reserved
  15.  
  16.  
  17.  
  18. This file provides user-level documentation and operating instructions for 
  19. UNARC version 1.2, which was released June 24, 1986.  Refer to the notice at 
  20. the end of this file regarding rights of use and distribution of this program.
  21.  
  22. Additional technical information of interest to programmers and advanced users 
  23. is provided by the associated file UNARC.INF.  The file UNARC12.MSG contains a 
  24. list of all files distributed with the current UNARC release and describes the 
  25. program changes from the previous version 1.1 release.
  26.  
  27.  
  28.  
  29. ABSTRACT
  30. --------
  31.  
  32. UNARC is a utility program for CP/M systems which allows the listing, typeout, 
  33. and extraction of subfiles contained in "archive" library (*.ARC) files.  
  34. These are commonly used for compressed file storage on remote access bulletin 
  35. board systems which cater to users of 16-bit computers running the MS-DOS (or 
  36. PC-DOS) operating system (e.g. IBM-PC and compatibles).  UNARC affords the 
  37. CP/M user the ability to process such files after downloading them via modem 
  38. from these remote systems.
  39.  
  40.  
  41.  
  42. REQUIREMENTS
  43. ------------
  44.  
  45. UNARC requires CP/M version 2.0 or higher.  The program is offered in two 
  46. versions.  The standard version, UNARC.COM, requires a Z80 (or compatible 
  47. equivalent) processor.  An alternate version, UNARCA.COM, is provided for 
  48. older systems with 8080 or 8085 processors.  Identical capabilities are 
  49. provided by the two program versions.
  50.  
  51.                                      NOTE
  52.  
  53.       Although UNARCA.COM can execute on ANY system capable of 
  54.       supporting CP/M, it is larger and significantly slower than 
  55.       UNARC.COM and should be avoided by users of Z80-based systems.
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. File:  UNARC.DOC                                                   Page 2 of 9
  68. ------------------------------------------------------------------------------
  69.  
  70.  
  71. UNARC is written in Z80 assembly language and requires only 4K bytes of disk 
  72. storage (5K bytes for UNARCA).  The program can execute in a minimum memory 
  73. environment, but (as distributed) it requires at least a 33K CP/M 2.2 system 
  74. size for full use of all functions (34K size for UNARCA).  The file UNARC.INF 
  75. provides additional memory usage details and describes how the program may be 
  76. configured for use on smaller systems.
  77.  
  78.  
  79.  
  80. ABOUT ARC FILES
  81. ---------------
  82.  
  83. The files which UNARC processes are the product of a utility program, ARC, 
  84. which executes on 16-bit computers running the MS-DOS (or PC-DOS) operating 
  85. system.  This program has achieved widespread popularity since it was first 
  86. introduced in March 1985.  It has become the de facto standard for file 
  87. storage on remote access systems catering to 16-bit computer users.
  88.  
  89.                                      NOTE
  90.  
  91.       The MS-DOS ARC program is a "freeware" product, copyrighted by 
  92.       System Enhancement Associates of Wayne, New Jersey.  I.e., it is 
  93.       distributed through public domain channels, but its author 
  94.       requests a voluntary contribution for its use.  Note that no such 
  95.       contribution is expected for the use of UNARC, subject to the 
  96.       conditions described in the notice at the end of this document.
  97.  
  98. An archive is a group of files collected together into a single file in such a 
  99. way that the individual files may be recovered intact.  In this respect, 
  100. archives are similar in function to libraries (*.LBR files), which have been 
  101. commonplace on CP/M systems since 1982, when the original LU library utility 
  102. program was introduced by Gary P. Novosielski.  (However, the two file formats 
  103. are not compatible.)
  104.  
  105. The distinguishing characteristic of an ARC archive is that its component 
  106. files are automatically compressed when they are added to the archive, so that 
  107. the resulting file occupies a minimum amount of disk space.  Of course, file 
  108. compression techniques have also been commonplace in the CP/M world since 
  109. 1981, when the public domain SQ and USQ "squeeze/unsqueeze" programs were 
  110. introduced by Richard Greenlaw.
  111.  
  112. The SQ/USQ programs and their numerous popular descendants utilize a well- 
  113. known general-purpose form of data compression (Huffman coding).  This 
  114. technique, which is also utilized by the ARC program, performs well for many 
  115. text files but often produces poor compression of binary files (e.g. object 
  116. program .COM files).  The ARC program also uses an advanced method of data 
  117. compression, which it terms "crunching."  This method (which is based on the 
  118. Lempel/Ziv/Welch or "LZW" algorithm), performs better than "squeezing" in many 
  119. (but not all) cases, often achieving 50% or better compression of ASCII text 
  120. files and 15-40% compression of binary object files.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. File:  UNARC.DOC                                                   Page 3 of 9
  134. ------------------------------------------------------------------------------
  135.  
  136.  
  137. ARC actually employs four different methods for storing files in an archive, 
  138. and always chooses the one which results in the best compression for a 
  139. particular file:
  140.  
  141. (1)  No compression ("unpacked").  The file is stored in its original form.
  142.  
  143. (2)  Run-length encoding ("packed").  Repeated sequences of 3-255 identical 
  144.      bytes are compressed into a three-byte sequence.
  145.  
  146. (3)  Huffman coding ("squeezed").  Each 8-bit byte is encoded by a variable 
  147.      number of (up to 16) bits, with the bit length (approximately) inversely 
  148.      proportional to the frequency of occurence of the corresponding byte.
  149.  
  150. (4)  LZW compression ("crunched").  Variable-length strings of bytes (in 
  151.      theory, up to nearly 4000 bytes in length) are represented by a single 
  152.      12-bit code.
  153.  
  154. Note that since one of the four methods involves no compression at all, the 
  155. resulting archive entry will never be larger than the original file.
  156.  
  157. During its brief lifetime, the ARC program has undergone numerous revisions 
  158. which have employed different variations on some of the above methods, 
  159. particularly LZW compression.  (The latest crunching method, introduced with 
  160. version 5.0 of the ARC program, is superior to earlier methods, particularly 
  161. for very short or very long files; and it almost always generates the best 
  162. compression of all four methods for any type of file.)  In order to retain 
  163. compatibility with archives created by earlier program revisions, ARC stores a 
  164. "version" indicator with each file in an archive.  Based on this indicator, 
  165. the latest release of the ARC program can always extract files created by 
  166. older releases (although it will only use the latest data compression versions 
  167. when adding new files to an archive).
  168.  
  169.                                      NOTE
  170.  
  171.       The current release of UNARC supports archive file versions 
  172.       generated by all releases of MS-DOS ARC through (at least) program 
  173.       version 5.12, dated February 7, 1986.
  174.  
  175. For additional information about archive files and the MS-DOS ARC utility, 
  176. refer to the excellent documentation file, ARC.DOC, which is available from 
  177. most remote access systems which utilize archive files.  For additional 
  178. information about the LZW algorithm (and data compression methods in general), 
  179. refer to the article "A Technique for High-Performance Data Compression", by 
  180. Terry A. Welch, in IEEE Computer, Vol. 17, No. 6, June 1984.
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199. File:  UNARC.DOC                                                   Page 4 of 9
  200. ------------------------------------------------------------------------------
  201.  
  202.  
  203. USING UNARC
  204. -----------
  205.  
  206. The UNARC program provides a brief on-line help message, which is invoked by 
  207. running the program with an empty command line:
  208.  
  209.       A>UNARC
  210.  
  211.       UNARC  1.2  24 Jun 86
  212.       CP/M Archive File Extractor (Z80 Version)
  213.  
  214.       Usage:  UNARC arcfile [d:][afn]
  215.  
  216.       Examples:
  217.  
  218.       B>UNARC A:SAVE.ARC *.*  ; List all files in archive SAVE on drive A
  219.       A>UNARC SAVE            ; Same as above
  220.       A>UNARC SAVE *.DOC      ; List just .DOC files
  221.       A>UNARC SAVE READ.ME    ; Typeout the file READ.ME
  222.       A>UNARC SAVE A:         ; Extract all files to drive A
  223.       A>UNARC SAVE B:*.DOC    ; Extract .DOC files to drive B
  224.       A>UNARC SAVE C:READ.ME  ; Extract file READ.ME to drive C
  225.  
  226.  
  227. As shown by this help display, the UNARC utility provides three capabilities:
  228.  
  229. (1)  Listing the directory of an archive
  230. (2)  Extracting component files from an archive
  231. (3)  Typing the contents of a component file at the console
  232.  
  233. The particular operation to be performed is determined by the form of the file 
  234. parameter(s) in the command line, as described separately in the sections 
  235. which follow.
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. File:  UNARC.DOC                                                   Page 5 of 9
  266. ------------------------------------------------------------------------------
  267.  
  268.  
  269. LISTING AN ARCHIVE DIRECTORY
  270. ----------------------------
  271.  
  272. By default, UNARC produces a detailed console listing of the component files 
  273. in an archive.  (In fact, there is no way to suppress this listing; it is 
  274. generated during file extraction and typeout operations as well.)  The first 
  275. command line parameter must specify the name of an archive file.  (A drive 
  276. name and filetype are optional; the filetype, if omitted, defaults to "ARC".)  
  277. If this is the only command line parameter, UNARC will generate a complete 
  278. directory of all component files in the specified archive file.  Otherwise, 
  279. the second command line parameter may be used to select a particular file to 
  280. be listed (or group of files, if it contains the ambiguous file specification 
  281. characters "*" or "?").  If no disk drive name is provided for the second 
  282. parameter, and this parameter specifies a group of files, the directory 
  283. listing is the only output generated by the program.
  284.  
  285. A sample directory listing is illustrated here:
  286.  
  287. A>UNARC CODES
  288.  
  289. Archive File = CODES.ARC
  290.  
  291. Name           Length  Disk  Stowage  Ver  Stored Saved   Date      Time   CRC
  292. ============  =======  ====  ======== === ======= ===== =========  ======  ====
  293. ABLE    .DOC    24320   24k  Crunched  8    11777  52%  30 Apr 86  10:50a  42C0
  294. BRAVO   .COM    17152   17k  Squeezed  4    14750  14%   2 May 86   4:11p  8CBD
  295. CHARLIE .TXT      234    1k   Packed   3       99  58%   2 May 86   4:11p  8927
  296.         ====  =======  ====               =======  ===
  297. Total      3    41706   42k                 26626  36%
  298.  
  299.  
  300. This listing is equivalent to the "verbose" listing of the MS-DOS ARC program 
  301. (with the addition of the "Disk" and "Ver" fields, which are unique to UNARC). 
  302. The listing requires an 80-column terminal width; there is currently no 
  303. "short" listing format.  The standard CP/M terminal control characters, CTRL-S 
  304. (to pause the listing output) and CTRL-C (to abort the program), may be used 
  305. while the listing is being generated.  Printer output to the CP/M list device 
  306. may be obtained by typing CTRL-P at CCP command level before executing UNARC.
  307.  
  308. "Name" is the file name which will be generated if the file is extracted by 
  309. UNARC on a CP/M system.  (This is not necessarily the same as the name 
  310. recorded in the archive file.  Although CP/M and MS-DOS file naming 
  311. conventions are identical, two conversions are made to guarantee file name 
  312. validity under CP/M:  Lower-case letters are converted to upper-case, and 
  313. non-printing characters are converted to underlines, "_".)  Note that archive 
  314. entries are usually maintained (and hence listed) in alphabetic name order.
  315.  
  316. "Length" is the uncompressed file length, i.e. the number of bytes the file 
  317. will occupy if extracted to disk, exclusive of any additional length imposed 
  318. by the CP/M file system.  Note that MS-DOS permits files of arbitrary lengths 
  319. (unlike CP/M which restricts all files to a multiple of 128 bytes).
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331. File:  UNARC.DOC                                                   Page 6 of 9
  332. ------------------------------------------------------------------------------
  333.  
  334.  
  335. "Disk" is the actual amount of disk space required to extract the file to a 
  336. CP/M disk, expressed as a multiple of 1K (1024) bytes.  Note that this number 
  337. is dependent on the disk data allocation block size.  (CP/M permits various 
  338. block sizes, ranging from 1K to 16K bytes.  Typical sizes are 1K for single- 
  339. density floppy disks, 2K for double-density floppies, and 4K for hard disks, 
  340. although these values are quite system-dependent.)  In the absence of an 
  341. explicit output drive name, UNARC uses the block size of the default 
  342. (currently "logged") disk drive (i.e. the drive which appears in the CCP 
  343. prompt).
  344.  
  345. "Stowage" is the compression method used, specified as "Unpacked", "Packed", 
  346. "Squeezed", "Crunched", or "Unknown!".  If the stowage type "Unknown!" 
  347. appears, it most likely indicates (if not a faulty archive file) a newer 
  348. release of the MS-DOS ARC program that supports a new compression method (or a 
  349. new variation of an existing method).  In this case, a corresponding new 
  350. release of UNARC will be required to extract the file.
  351.  
  352. "Ver" further identifies the version of compression used.  Currently, UNARC 
  353. supports versions 1-8: unpacked files can have versions 1 or 2; packed files, 
  354. version 3; squeezed files, version 4; and crunched files, versions 5-8.  The 
  355. highest version number associated with each compression method is the one 
  356. generated by the most recent release of the MS-DOS ARC program.
  357.  
  358. "Stored" is the compressed file length, i.e. the number of bytes occupied by 
  359. the file in the archive.  (This does not include the overhead associated with 
  360. the directory information itself, which adds an additional 29 bytes to the 
  361. size of each component file.)
  362.  
  363. "Saved" is the percentage of the original file length which was saved by 
  364. compression; i.e., higher values indicate better compression.  (The MS-DOS ARC 
  365. documentation refers to this as the "stowage factor.")  The value shown on the 
  366. totals line applies to the archive as a whole, not including the directory 
  367. overhead.
  368.  
  369. "Date" and "Time" refer to the last file modification, as of the time it was 
  370. added to the archive.  (Date and time stamping is, of course, one of the nice 
  371. features of MS-DOS which is lacking in standard CP/M 2.2.)
  372.  
  373. "CRC" is an internal 16-bit cyclic redundancy check value which the MS-DOS ARC 
  374. program computes when it adds a file to an archive (expressed in hexadecimal). 
  375. As a test of file validity, UNARC re-computes this value when it extracts a 
  376. file (see below).  Note that this value is calculated by a different method 
  377. than that used by either of the two popular public domain programs, CRCK and 
  378. CHEK.  (It is however mathematically valid as a quite reliable error-detection 
  379. mechanism.)  This value is shown in the listing for completeness only.
  380.  
  381. The "Total" line is displayed only if multiple files appear in the listing.
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397. File:  UNARC.DOC                                                   Page 7 of 9
  398. ------------------------------------------------------------------------------
  399.  
  400.  
  401. EXTRACTING FILES FROM AN ARCHIVE
  402. --------------------------------
  403.  
  404. If the second command line parameter contains a disk drive name, UNARC will 
  405. extract the selected file(s) from the archive to CP/M file(s) on the indicated 
  406. disk drive.  If only a drive name appears, all component files of the archive 
  407. will be extracted.  The following illustrates a sample archive directory 
  408. listing as generated during a file extraction operation:
  409.  
  410. A>UNARC CODES B:
  411.  
  412. Archive File = CODES.ARC
  413. Output Drive = B:
  414.  
  415. Name           Length  Disk  Stowage  Ver  Stored Saved   Date      Time   CRC
  416. ============  =======  ====  ======== === ======= ===== =========  ======  ====
  417. ABLE    .DOC    24320   24k  Crunched  8    11777  52%  30 Apr 86  10:50a  42C0
  418. Overwrite existing output file (y/n)? Y
  419. BRAVO   .COM    17152   18k  Squeezed  4    14740  14%   2 May 86   4:11p  8CBD
  420. Warning: Extracted file has incorrect CRC
  421. Warning: Extracted file has incorrect length
  422. Warning: Bad archive file header, bytes skipped = 10
  423. CHARLIE .TXT      234    2k   Packed   3       99  58%   2 May 86   4:11p  8927
  424.         ====  =======  ====               =======  ===
  425. Total      3    41706   44k                 26616  36%
  426.  
  427.  
  428. The above listing also illustrates several warning messages which may occur 
  429. when extracting files from an archive.
  430.  
  431. The message "Overwrite existing output file (y/n)?" appears if a file of the 
  432. same name already exists on the output drive.  The user must answer "Y" (or 
  433. "y") to allow the extraction to proceed (in which case, the existing file is 
  434. unceremoniously deleted).  Any other response will cause UNARC to preserve the 
  435. existing file, bypass the extraction operation for the current file, and 
  436. (except for a CTRL-C response) skip to the next file to be extracted (if any).
  437.  
  438. The first two warning messages illustrated above are provided as a check on 
  439. the validity of the extracted file.  These indicate that either the cyclic 
  440. redundancy check (CRC) value computed by UNARC, or the resulting extracted 
  441. file length, does not match the corresponding value recorded in the archive 
  442. when the original file was added to it.  The final warning message occurs if 
  443. UNARC fails to detect the proper format for the start of a new subfile, but 
  444. can recover by skipping a certain number of bytes in the archive file.  (If 
  445. the recovery attempt fails, UNARC aborts with the message "Invalid archive 
  446. file format.")  The appearance of any of these messages most likely indicates 
  447. that the file data has been corrupted in some way (e.g. during modem 
  448. transmission from a remote system).
  449.  
  450. Note that if the original (i.e. MS-DOS) file length was not an exact multiple 
  451. of 128 bytes (as required by CP/M), UNARC will pad the final record of the 
  452. extracted file with hex "1A" (ASCII CTRL-Z) bytes.  This provides the correct 
  453. end-of-file termination for text files, according to CP/M conventions.
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463. File:  UNARC.DOC                                                   Page 8 of 9
  464. ------------------------------------------------------------------------------
  465.  
  466.  
  467. Also, the disk space shown in the archive directory listing will be correct 
  468. for the specified disk drive.  (In the above examples, drive A: has a 1K data 
  469. allocation block size while drive B: has a 2K block size, which accounts for 
  470. the differences in the two listings.)  In order to determine the exact disk 
  471. space requirements in advance of a file extraction operation, the user may 
  472. first "log into" the desired output drive (i.e. select it as the default 
  473. drive), and run UNARC to obtain a directory listing only.  (This is a 
  474. consideration only on systems with mixed disk drive types.)
  475.  
  476. A file extraction operation may be aborted at any time by entering CTRL-C from 
  477. the console.  In this case, any partial output file will remain on disk and 
  478. should be deleted manually following the program abort.  (Any existing file of 
  479. the same name will have already been deleted, however.)
  480.  
  481.  
  482.  
  483. TYPING OUT A FILE IN AN ARCHIVE
  484. -------------------------------
  485.  
  486. A console typeout of the contents of a single component file in an archive may 
  487. be requested by specifying a non-ambiguous file name (and no disk drive name) 
  488. in the second command line parameter.  For example:
  489.  
  490. A>UNARC CODES ABLE.DOC
  491.  
  492. Archive File = CODES.ARC
  493.  
  494. Name           Length  Disk  Stowage  Ver  Stored Saved   Date      Time   CRC
  495. ============  =======  ====  ======== === ======= ===== =========  ======  ====
  496. ABLE    .DOC    24320   24k  Crunched  8    11777  52%  30 Apr 86  10:50a  42C0
  497. -------------------------------------------------------------------------------
  498.   This is file ABLE.DOC, contained within the archive CODES.ARC.  Typeout of 
  499.   this file may be paused by typing CTRL-S from the console (then resumed by 
  500.   typing any other key).  Typeout will proceed until the end of this file or
  501.   may be aborted by typing CTRL-C.....
  502.  
  503.  
  504. The specified file is assumed to contain valid ASCII text data.  In 
  505. particular, all bytes are masked to seven bits, and all ASCII control 
  506. characters are ignored except for HT (horizontal tab, which is expanded to 
  507. blanks with assumed tab stops at every eighth column), LF, VT or FF (line 
  508. feed, vertical tab or form feed, which generate a new typeout line), and SUB 
  509. (CTRL-Z, which by CP/M convention indicates end-of-file and terminates the 
  510. typeout).  Note that BS (backspace) and CR (carriage return) are ignored, so 
  511. that text will not be obscured within files which utilize these for over- 
  512. printing (i.e. when directed to a printer).
  513.  
  514. The following filetypes, which are usually associated with binary (non-text) 
  515. data, are specifically excluded from typeout operations:  COM, CMD, EXE, OBJ, 
  516. OV?, REL, ?RL, INT, SYS, BAD, LBR, ARC, and ?Q? (any "squeezed" file).  (This 
  517. list may be modified or expanded, as decribed in the file UNARC.INF.)  If one 
  518. of these filetypes is specified, only the directory information for the 
  519. requested file is listed.
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. File:  UNARC.DOC                                                   Page 9 of 9
  530. ------------------------------------------------------------------------------
  531.  
  532.  
  533. A FINAL WORD FROM THE AUTHOR
  534. ----------------------------
  535.  
  536. I undertook writing the UNARC program to satisfy my curiosity about software 
  537. developments in the MS-DOS/PC-DOS world.  The ARC "freeware" program has been 
  538. in existence for over a year now, and it has achieved widespread popularity 
  539. and acceptance in the 16-bit community.  Unfortunately, the lack of a 
  540. compatible equivalent for CP/M systems renders a large amount of public domain 
  541. software inaccessible to 8-bit users such as myself.  (Note that 16-bit 
  542. software can indeed be of interest to users of 8-bit systems, e.g. Pascal and 
  543. C language programs.)  Also, an increasing number of RCPM systems are catering 
  544. to both 8-bit and 16-bit users, and it is my hope that UNARC may find a 
  545. welcome home on such systems.
  546.  
  547. Because UNARC satisfies my original goals, I stopped short of producing a 
  548. complete ARC program equivalent which includes creation of archive files.  
  549. Also, I did not (initially) see any advantage to promoting use of the 
  550. sequential .ARC file format, which is somewhat slower to process (though 
  551. certainly more compact) than the random-access format which .LBR libraries 
  552. have provided for years.  However, I am quite impressed with the LZW 
  553. "crunching" algorithm, and I now believe there is a place for .ARC files in 
  554. the CP/M world (particularly on RCPM's, where the name of the game is to 
  555. reduce file upload/download time).  So watch this space for news of my next 
  556. project:  NARC, the companion program to UNARC.
  557.  
  558. Special note to RCPM SYSOP's:  Several optional patches may be made to UNARC 
  559. to allow its safe use on remote access systems.  Refer to the file UNARC.INF 
  560. for specific details.
  561.  
  562.  
  563.                                     NOTICE
  564.  
  565.       The UNARC program and its associated documentation is the copy- 
  566.       righted property of its author -- it is NOT in the public domain. 
  567.       HOWEVER...  Free use, distribution, and modification of this 
  568.       program is permitted (and encouraged), subject to the following 
  569.       conditions:
  570.  
  571.       (1)  Such use or distribution must be for non-profit purposes only.
  572.       (2)  The author's copyright notice may not be altered or removed.
  573.       (3)  Modifications to this program or its documentation files may 
  574.            not be distributed without notification of and approval by 
  575.            the author.
  576.  
  577.       No fee is requested or expected for the use and distribution of 
  578.       this program subject to the above conditions.  The author reserves 
  579.       the right to modify these conditions for any future revisions of 
  580.       this program.  Questions, comments, suggestions, commercial 
  581.       inquiries, and bug reports or fixes are welcomed by the author:
  582.  
  583.                            Bob Freed
  584.                            62 Miller Road
  585.                            Newton Centre, MA  02159
  586.                            Telephone (617) 332-3533
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.