home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 111_01 / squeezer.doc < prev    next >
Text File  |  1985-08-21  |  24KB  |  598 lines

  1.             ============
  2.             SQUEEZER.DOC
  3.             ============
  4.               7/18/81
  5.  
  6. USAGE AND RECOMPILATION DOCUMENTATION FOR:
  7.  
  8.     SQ.COM,  Ver 1.3: File squeezer
  9.     USQ.COM, Ver 1.4: File unsqueezer
  10.     FLS.COM, Ver 1.1: Ambiguous file name expander
  11.  
  12. --------------------
  13. DISTRIBUTION RIGHTS:
  14. --------------------
  15. I   allow  unrestricted  non-profit  distribution  of   this
  16. software, and invite  users' groups  to  spread  it  around.
  17. However,  any distribution for profit requires my permission
  18. in  advance.  This applies only to the above listed programs
  19. and their program source and documentation files.  I do sell
  20. other software.
  21.  
  22. --------
  23. PURPOSE:
  24. --------
  25. The file squeezer,  SQ, compresses files into a more compact
  26. form.  This provides:
  27.      1.   Faster transmission by modem.
  28.      2.   Fewer diskettes to distribute a program  package.
  29.           (Include USQ.COM and instructions, both unsqueezed.)
  30.      3.   Fewer diskettes for archival storage.
  31.  
  32. Any file can be squeezed,  but program source files and text
  33. files  benefit the most,  typically shrinking by 35%.  Files
  34. containing only a limited character set,  such as dictionary
  35. files,  may shrink as much as 48%.  Squeezed files look like
  36. gibbersh and must be unsqueezed before they can be used.
  37.  
  38. The  unsqueezer,  USQ,  expands  squeezed files  into  exact
  39. duplicates  of the original or provides a quick,  unsqueezed
  40. display  of  the  tops  of  (or  all  of)  squeezed   files.
  41. Unsqueezing requires only a single pass.
  42.  
  43. Both SQ and USQ accept batches of work specified by lists of
  44. file  names  (with  drives  if  needed)  and   miscellaneous
  45. options. They accept these parameters in any of three ways:
  46.  
  47.      1. On the CP/M command line.
  48.      2. From the console keyboard.
  49.      3. From a file.
  50.  
  51. The  FLS program can be used (on the same command line!)  to
  52. expand parameter lists containing wild-card (ambiguous) file
  53. names into lists with the specific file names required by SQ
  54. and USQ.
  55.  
  56. This  combination of programs allows you to issue  a  single
  57. command which will produce many squeezed or unsqueezed files
  58. from and to various diskettes. For example, to unsqueeze all
  59. squeezed  ASM files on drive B and send the results to drive
  60. C  and also unsqueeze all squeezed TXT files on drive A  and
  61. send the results to drive D:
  62.      A>fls c: b:*.aqm d: *.tqt |usq
  63. For detailed instructions see USAGE.
  64. This  DOES  run under plain old vanilla CP/M!  Many  of  the
  65. smarts  are buried in the COM files in the form  of  library
  66. routines  provided  with the BDS C package  (available  from
  67. Lifeboat).
  68.  
  69. The  above example simulates a "pipe" (indicated by the "|")
  70. by sending the "console" output of the fls.com program to  a
  71. temporary  file  and  then running the sq.com  program  with
  72. options  which  cause  it to read its  parameters  from  its
  73. "console" input, which is really redirected to come from the
  74. temporary file.
  75.  
  76. -------
  77. THEORY:
  78. -------
  79. The  data  in the file is treated at the byte  level  rather
  80. then  the word level,  and can contain absolutely  anything.
  81. The compression is in two stages: first repeated byte values
  82. are  compressed  and  then a  Huffman  code  is  dynamically
  83. generated  to match the properties of each particular  file.
  84. This requires two passes over the source data.
  85.  
  86. The  decoding  table is included in the  squeezed  file,  so
  87. squeezing  short  files can actually  lengthen  them.  Fixed
  88. decoding  tables  are not used because  English and  various
  89. computer  languages vary greatly as to upper and lower  case
  90. proportions  and  use of special  characters.  Much  of  the
  91. savings  comes  from  not  assigning codes  to  unused  byte
  92. values.
  93.  
  94. More detailed comments are included in the source files.
  95.  
  96. ---------------
  97. USAGE TUTORIAL:
  98. ---------------
  99. As usual, you have to learn how to tell the programs what to
  100. do  (i.e.,  what parameters to type after the program name).
  101. First I will introduce the various possibilities by example.
  102. Then I will summarize the rules.
  103.  
  104. In  the simplest case either SQ or USQ can simply  be  given
  105. one or more file names (with or without drive names):
  106.      A>sq xyz.asm
  107.      A>sq thisfile.doc b:thatfile.doc
  108. will   create  squeezed  files  xyz.aqm,   thisfile.dqc  and
  109. thatfile.dqc,  all  on the current drive,  A.  The  original
  110. files are not disturbed. Note that the names of the squeezed
  111. files are generated by rules - you don't specify them.
  112.  
  113. Likewise,
  114.      A>usq xyz.aqm
  115. will  create file xyz.asm on the A  drive,  overwriting  the
  116. original.  (The  original name is recreated from information
  117. stored in the squeezed version.) The squeezed version is not
  118. disturbed.
  119.  
  120. Each file name is processed in order,  and you can list  all
  121. the files you can fit in a command.  The file names given to
  122. SQ and USQ must be specific. You will learn below how to use
  123. the FLS program to expand patterns like *.asm (all files  of
  124. type  asm) into a list of specific names and feed them  into
  125. SQ or USQ.
  126.  
  127. The above examples let the destination drive default to  the
  128. current logged drive, which was shown in the prompt to be A.
  129. You can change the destination drive as often as you like in
  130. the parameter list. For example,
  131.      A>sq x.asm b: y.asm z.asm c: d:s.asm
  132. will create x.aqm on the current drive,  A,  y.aqm and z.aqm
  133. on the B drive and s.aqm on the C drive. Note that the first
  134. three originals are on drive A and the last one is on  drive
  135. D.  Remember  that each parameter is processed in order,  so
  136. you must change the destination drive before you specify the
  137. files to be created on that drive.
  138.  
  139. Eventually you will have diskettes with many squeezed  files
  140. on  them and you will wonder what is in which file.  If they
  141. weren't  squeezed you would use the TYPE command to look  at
  142. the  comments at the beginning of the  files.  But  squeezed
  143. files  just  make  a mess on your CRT screen when  you  TYPE
  144. them,  so  I have provided the required feature as a preview
  145. option to the USQ program.
  146.      A>usq -10 x.bas b:y.asm
  147. will  not take the time to create unsqueezed files.  Instead
  148. it  will  unsqueeze  the first 10 lines  of  each  file  and
  149. display  them  on your console.  The display from each  file
  150. consists of the file names, the data and a formfeed (FF).
  151. Also,
  152.      A>usq - c:xyz.mac
  153. will  unsqueeze  and display the first 65,535 lines  of  any
  154. files listed. That's the biggest number you can give it, and
  155. is intended to display the whole file.
  156.  
  157. This   preview  option  also  ensures  that  the   data   is
  158. displayable.  The  parity bit is stripped off (some Wordstar
  159. files  use  it for format control) and any  unusual  control
  160. characters  are  converted to periods.  You'll see  some  of
  161. these  at  the end of the files as the CP/M end of  file  is
  162. treated  as  data  and  the  remainder  of  the  sector   is
  163. displayed.
  164.  
  165. You are now familiar with all of the operational  parameters
  166. of SQ and USQ.  But so far you have always typed them on the
  167. command line which caused the program to be run. For reasons
  168. which  will become apparent later,  I have also provided  an
  169. interactive  mode.   If  there  are  no  parameters  (except
  170. directed  i/o  parameters,  described later) on the  command
  171. line,  SQ  and USQ will prompt with an asterisk  and  accept
  172. parameters from the console keyboard. Each parameter must be
  173. followed  by  RETURN and will be processed  immediately.  An
  174. empty  command (just RETURN) will cause the program to  exit
  175. back  to  CP/M.  Try it - it will help you  understand  what
  176. follows.
  177.  
  178. Now lets get into directed i/o, which will be new to most of
  179. you,  but will save you so much work you will wonder how you
  180. ever got along without it.
  181.  
  182. Perhaps you frequently squeeze or unsqueeze the same list of
  183. files  and you would like to type the list once and be  done
  184. with it. Use an editor (or FLS, described below) to create a
  185. file  with  one  parameter per line.  For  example  call  it
  186. commands.lst.
  187.  
  188. Then,
  189. A>sq <commands.lst
  190. will  cause the command list file to be read as if you  were
  191. typing it! You will see it on the console.
  192.  
  193. That was redirected console input.  Now assume that you have
  194. a very long list of files to squeeze or unsqueeze and  while
  195. you  are  taking a nap the progress comments and maybe  some
  196. error  comments  scroll  off  the  screen.  Redirecting  the
  197. console   output   will  let  you  capture   the   progress
  198. information  in a file so you can check it later.  The error
  199. comments will have the screen to themselves.
  200.  
  201. For example,
  202. A>sq <commands.lst >out
  203. will send the progress comments to the file "out", which you
  204. can TYPE later.  The routine display of the program name and
  205. version, etc., will still go to the console.
  206.  
  207. A more practical example is to send that information to  the
  208. console and to the file.
  209. A>sq <commands.lst +out
  210. will do that.
  211.  
  212. Redirected  input  and output are independent - you  can  do
  213. either, both or neither.
  214.  
  215. There is one more form of redirection called a "pipe". It is
  216. by far the most important to you.  Recall that I promised to
  217. tell  you how to use ambiguous file names such as *.asm (all
  218. files  of  type asm on the current default drive)  or  *.?q?
  219. (all files having a "q" as the second letter of their type).
  220. That last example just happens to mean "all squeezed files",
  221. assuming  you don't have any other files with such  a  silly
  222. name (I hope).
  223.  
  224. I  have  provided  a program called FLS  which  is  intended
  225. primarily for use in pipes. Here is an example:
  226. A>fls c: x.asm y*.asm >temp.$$$
  227. will  simply  pass the first two parameters through  to  the
  228. console output,  which is being redirected to a file  called
  229. temp.$$$.  But  the third parameter will be replaced by  all
  230. the  files  on the current drive which are of type  asm  and
  231. have names beginning with y.
  232.  
  233. FLS  is  smart  enough to know that a letter followed  by  a
  234. colon and nothing else is a destination drive name  intended
  235. for  SQ or USQ.  It will also treat any parameter  beginning
  236. with  a  - (minus sign) as an option to be  passed  through.
  237. Anything  else  is considered a file name or pattern and  is
  238. checked against the directory of the appropriate drive.
  239.  
  240. Therefore you could use:
  241. A>fls b: c:*.aqm *.aqm -10 stuff.dqc >temp.$$$
  242. A>usq <temp.$$$
  243. A>era temp.$$$
  244. to unsqueeze all files of type aqm on drives C and A and put
  245. the unsqueezed files on drive B,  and then preview the first
  246. 10 lines of file stuff.dqc.
  247.  
  248. Here  is where the pipe comes in.  The above three  commands
  249. can be abbreviated as:
  250. A>fls b: c:*.aqm *.aqm -10 stuff.dqc |usq
  251.  
  252. That  little  "|" is the pipe option and it causes  the  FLS
  253. output to be redirected to a temporary file and when that is
  254. done  it  actually  runs USQ for you with the  proper  input
  255. redirection and then erases the temporary file.
  256.  
  257. If  that  isn't  enough,  you  can still  use  the  +  or  >
  258. redirection  option  at the end of that line to capture  the
  259. console output from USQ.
  260. A>fls b: c:*.aqm *.aqm -10 stuff.dqc |usq >out
  261.  
  262. If you plan your comments carefully you can produce a single
  263. file containing an abstract of an entire library of squeezed
  264. files in one step!
  265. A>fls -25 *.?q? |usq >abstract
  266.  
  267. One  final point.  Anywhere you specify a file name you  can
  268. specify a drive in front of it.  That applies to redirection
  269. and well as files to be squeezed and unsqueezed.  If a  name
  270. begins  with a - (minus sign) it will look like an option to
  271. FLS unless you put a drive name in front of it (b:-sq.077).
  272.  
  273. --------------
  274. USAGE SUMMARY:
  275. --------------
  276. The previous section gradually presented the various options
  277. by example. This section gives a condensed and more abstract
  278. description  and is intended for reference.  If you couldn't
  279. see  the forest for the trees,  maybe this will give  you  a
  280. better view.
  281.  
  282. The parameter handling of these programs is straightforward.
  283. Parameters  fall into two classes:  directed i/o options and
  284. operational parameters . Note that parameters read from files
  285. or  from the console are not forced to upper case,  but  the
  286. internal  file  handling routines all treat  lower  case  as
  287. upper case.
  288.  
  289. When  a  file to be written already exists,  it  is  quietly
  290. overwritten.
  291.  
  292. Directed I/O parameters:
  293. The  first  action  taken by these programs  is  to  process
  294. directed  i/o parameters from the CP/M command  line.  These
  295. parameters are optional and take the forms:
  296.  
  297.      <file     read console input from file
  298.      >file     send most console output to file
  299.      +file     send most console output to file and console
  300.      |pgm ...  send most console output to a temporary file
  301.                then run PGM.COM and take console input
  302.                from the temporary file. "..." represent the
  303.                parameters for PGM. This is called "piping".
  304.  
  305. Only  one input and one output redirection can apply to each
  306. program. After the program has arranged for any directed i/o
  307. parameters to be obeyed they are deleted from the  parameter
  308. list seen by the rest of the program.
  309.  
  310. Operational parameters:
  311. The   program  then  checks  if  there  are  any   remaining
  312. parameters from the CP/M command line.  If there  are,  they
  313. are obeyed. If and only if there are no remaining parameters
  314. on  the  command line,  the program prompts for them at  the
  315. console.  If  console input has been directed to a file  one
  316. parameter  is  read and obeyed from each line of  the  file.
  317. Otherwise,  the  user  follows each typed parameter  with  a
  318. RETURN and an empty command exits the program.
  319.  
  320. Each  operational parameter is obeyed without looking  ahead
  321. to  other  parameters,  so options should precede  the  file
  322. names to which they apply.
  323.  
  324. SQ operational parameters are a list of the following types:
  325.      drive:         set the current destination drive
  326.      filename       file to be squeezed
  327.      drive:filename  "   "    "    "
  328.  
  329. SQ does not change the files being squeezed. New, squeezed
  330. files are created on the destination drive (defaults to  the
  331. current drive) with names derived from the original name but
  332. with  the second letter of the file type (extention) changed
  333. to Q.  When there is no type, QQQ is used. The original name
  334. is saved in the squeezed file.
  335.  
  336. USQ  operational  parameters  are a list  of  the  following
  337. types:
  338.      drive:         set the current destination drive
  339.      filename       file to be squeezed
  340.      drive:filename  "   "    "    "
  341.      -count         Preview (display on the console) the first
  342.                     "count"  lines  of  each   file,   where
  343.                     "count" is a number from 1 to 65535.
  344.  
  345. If  the  -count  option IS NOT in effect  then  USQ  creates
  346. unsqueezed  versions of the listed files on the  destination
  347. drive,  which  defaults to the current  logged  drive.  Each
  348. unsqueezed  file is CRC checked against the CRC value of the
  349. original file, which is part of the squeezed file.
  350.  
  351. The  -count  option is for  previewing  squeezed  files.  It
  352. allows  you  to  skim  through a group  of  squeezed  files,
  353. peeking  at  the first "count" lines in each.  The  >  or  +
  354. output  redirection  option could be used  to  capture  this
  355. information  in a file,  along with the corresponding  file
  356. names, thus forming an abstract of the files on a disk.
  357.  
  358. When  the  -count option is used the CRC check is  cancelled
  359. and  the  output is forced into printable form by  stripping
  360. the  parity bit and changing most unprintable characters  to
  361. periods.  The exceptions are CR,  LF, TAB and FF. The output
  362. from  each file is terminated by an FF.  PIP can be used  to
  363. strip FFs and provide formatted printing if desired. "Count"
  364. defaults to the maximum value,  65,535,  in case you want to
  365. look at a whole file.
  366.  
  367. FLS operational parameters:  FLS is a "filter",  which means
  368. it  accepts input from the console input or command line and
  369. transforms the input according to a set of rules to  produce
  370. console  output.  That's fine for getting familiar with FLS,
  371. but to make it useful you "pipe" its output to the input  of
  372. SQ or USQ.
  373.  
  374. Any FLS parameter which is of the form:
  375.      drive:
  376. or   -anything
  377. is  copied  to console output unchanged.
  378.  
  379. Any  other  FLS operational parameter is treated as  a  file
  380. name and is checked against the directory of the appropriate
  381. drive. If it contains * or ? it is replaced by a list of all
  382. the files which fit the pattern.  If nothing is found in the
  383. directory  an error comment is sent to the console,  even if
  384. normal console output has been redirected to a file.
  385.  
  386. IMPORTANT:  when  using  a pipe from FLS or any other  input
  387. redirection to get the file list,  etc.,  on which USQ or SQ
  388. are  to operate you must NOT put any parameters  other  than
  389. redirection  following  the program name.  They must be  all
  390. together in the input parameter list. Example:
  391.  
  392. A>fls -10  b:*.cq |usq +saveout
  393. is  the  proper way to preview the top (first 10  lines)  of
  394. each  squeezed  .C file on the B drive.  The -10  is  passed
  395. through  FLS  to USQ.  The results will be displayed on  the
  396. console  and  saved in file "saveout" on the  A  drive.  The
  397. saveout  file lets you confirm the list of  processed  files
  398. even  if  the display scrolls off the screen  while  running
  399. unattended.
  400.  
  401. In summary, i/o redirection parameters (those prefixed by +,
  402. <,  >,  or |) always follow the command to which they apply,
  403. but  operational parameters  (destination  drive,  -options)
  404. must be with the file name list.
  405.  
  406. EXAMPLES:
  407.  
  408. 1. Unsqueeze all squeezed files on the current drive and put
  409. the resulting unsqueezed files on the same drive.
  410.      A>fls *.?q? |usq
  411.  
  412. 2.  Look  at  the first 10 lines of every squeezed  file  on
  413. drive B.
  414.     A>fls -10 b:*.?Q? |usq
  415. note  that since the file names for USQ came from  FLS,  the
  416. count option had to come from there too.
  417.  
  418. 4.  Squeeze all .ASM files on the B and C drives and put the
  419. squeezed files on the D drive.
  420.      A>fls d: b:*.asm c:*.asm |sq
  421. Note that if d:  had not been first the squeezed files would
  422. have gone to the A drive.
  423.  
  424. 5.  Squeeze file xyz.c on the A drive and put the results on
  425. the A drive.
  426.      A>sq xyz.c
  427.  
  428. 6.  Build  a  parameter list of all ASM files on drive C  in
  429. file XX
  430. R and view it on the console.
  431.      A>fls c:*.asm +xx.par
  432.  
  433. 7. Use the above list to squeeze the files to the A drive.
  434.      A>sq <xx.par
  435.  
  436. 8. As above, but results to the B drive.
  437.      A>b:
  438.      B>a:sq <a:xx.par
  439.  
  440. 9.  Squeeze  all ASM and C files on the A drive and put  the
  441. results on the B drive. Capture the progress comments in the
  442. file "out" without displaying them.
  443.      A>fls b: *.asm *.c |sq >out
  444.  
  445. 10.  Preview  the first 24 lines of each squeezed  ASM  file
  446. THEN unsqueeze them (unless stopped via cntl-C).
  447.      A>fls -24 *.aqm a: *.aqm |usq
  448. Note  that  specification  of a  destination  drive  cancels
  449. previewing.
  450.  
  451. --------------
  452. RECOMPILATION:
  453. --------------
  454. These programs are written in C, for the BDS C compiler, and
  455. have been adapted for directed I/O,  as described in the BDS
  456. C  DIO package.   Instructions  below are for compiling with
  457. the BDS C compiler.
  458.  
  459. The files you will need are:
  460.  
  461.     SQ.C        BDSCIO.H    SQDIO.C
  462.     USQ.C        DIO.H        USQDIO.C
  463.     FLS.C                DIO2.C
  464.     TR1.C
  465.     TR2.C
  466.     UTR.C
  467.     IO.C
  468.     SQDEBUG.C
  469.     SQ.H
  470.     USQ.H
  471.     SQCOM.H
  472.  
  473. The  files  in  the first column are included in this public
  474. domain release.
  475.  
  476. BDSCIO.H  and DIO.H are distributed with the BDS C compiler.
  477. The  BDSCIO.H  header  file  contains information about your
  478. system, including how much space to reserve for file buffers.
  479. You should use your own version of  this  file.   The  three
  480. files  in  the  right  column are identical;  create them by
  481. copying DIO.C, which is  also  distributed  with  the  BDS C
  482. compiler.  Three copies with unique names are needed because
  483. each may be compiled  with  a  different  external  variable
  484. option, as will be seen below.  Use a version of DIO.C dated
  485. December, 1981 or later.   Earlier versions contained a bug;
  486. the dioflush function failed to delete the  TEMPIN.$$$  file
  487. before renaming another file to that name.   (CP/M is stupid
  488. enough to make two files of the same name!)
  489.  
  490. The  procedures below indicate the various C language source
  491. files  (file  type  C) required to  recompile.  Those  files
  492. contain  #include statements,  which cause the header  files
  493. (file type H) to be read and compiled.
  494.  
  495. Each  CC command produces a CRL file with specific addresses
  496. for  external variables.  If you recompile a file  using the
  497. same value in the -e option, you don't have to recompile the
  498. other  files;  just  do the desired CC and then  repeat  the
  499. entire CLINK.
  500.  
  501. CLINK's -s option prints statistics. Top of memory means the
  502. current TPA. Stack space is what's left over. These programs
  503. require  stack  space for local  variables,  including  some
  504. healthy I/O buffers.  Also some functions are recursive.  If
  505. SQ doesn't have several K of stack space it will probably go
  506. crazy and do almost anything.
  507.  
  508. In the procedures below, the  C compiler  is  named  CC.COM;
  509. yours  may  be CC1.COM.  Also, the files being compiled have
  510. their types (.c) included;  that may not be  necessary  with
  511. your compiler.  Before compiling, have BDSCIO.H and DIO.H on
  512. the diskette with your compiler.   Place all the other files
  513. named above on one diskette,  which  may  be  your  compiler
  514. diskette; here we have assumed that the compiler diskette is
  515. in drive A,  and  that  the other files are on a diskette in
  516. drive b.
  517.  
  518. To compile SQ (note: not all use -o):
  519. A>cc b:sq.c -o -e3c00
  520. A>cc b:sqdio.c -e3c00
  521. A>cc b:tr1.c -o -e3c00
  522. A>cc b:tr2.c -o -e3c00
  523. A>cc b:io.c -o -e3c00
  524. A>cc b:sqdebug.c -e3c00
  525. A>clink b:sq sqdio tr2 tr1 io -s
  526.  
  527. The linker will display some  statistics.   Check  that  the
  528. start  address  of  the  external  variables  (3C00  in this
  529. example) is higher  than  the  last  code  address.  IF NOT,
  530. REPEAT THE ABOVE WITH A HIGHER ADDRESS IN THE -e OPTIONS.
  531.  
  532. To compile USQ (Note: not all use -o):
  533. A>cc b:usq.c -o -e2d00
  534. A>cc b:usqdio.c -e2d00
  535. A>cc b:utr.c -o -e2d00
  536. A>clink b:usq usqdio utr -s
  537.  
  538. CHECK THE ADDRESSES as described above.
  539.  
  540. To compile FLS:
  541. A>cc b:fls.c
  542. A>cc b:dio2.c
  543. A>clink b:fls dio2
  544.  
  545. That's it.  However, you can save a lot of typing (and avoid
  546. many  chances  for  error)  by  using  the  SUBMIT files for
  547. compiling, instead of entering all  the  above  commands  by
  548. hand.   Put the three files  SQ.SUB, USQ.SUB, and FLS.SUB on
  549. drive A,  along with your  compiler,  BDSCIO.H,  and  DIO.H.
  550. Put the other files discussed above on one drive  (let's say
  551. drive b).  Then, to compile SQ:
  552.  
  553. A>submit sq b: 3c00
  554.  
  555. where b is the drive name,  and  3c00  is  the  address  for
  556. externals,  as above.  The submit file contains the compiler
  557. and linker commands, and will execute each, in turn.   After
  558. the linkage  is  complete,  check the addresses as described
  559. above, and increase the externals-address, if necessary.
  560.  
  561. To compile USQ:
  562. A>submit usq b: 2d00
  563.  
  564. Check the addresses as described above.
  565.  
  566. And to compile FLS:
  567. A>submit fls b:
  568.  
  569. Even if you put all the  files  on  your  compiler  diskette
  570. for compiling,  don't leave the drive name out of the submit
  571. command, or the system will get confused.
  572.  
  573. -------------------
  574. IN CASE OF TROUBLE:
  575. -------------------
  576. I  welcome  suggestions  and  bug  reports,   but  you  must
  577. understand that some of the ideas I get would involve almost
  578. as much program development as the original package.  I have
  579. what I want and (I hope) what most users want,  so I am  not
  580. motivated  to  spend  many more  months  creating  something
  581. entirely  different  which  just  happens  to  involve  data
  582. compression. The data compression routines are probably less
  583. than  half of this package,  and are designed to operate  on
  584. large blocks of data, such as files.
  585.  
  586.         Dick Greenlaw
  587.         251 Colony Ct.
  588.         Gahanna, Ohio 43230
  589.  
  590. ------------------------------------------------------------
  591. SQUEEZER.DOC revised November 3, 1985.
  592. Please send bug reports and comments to:
  593.  
  594.         John M. Smith
  595.         Librarian, CUG Utilities IV diskette
  596.         21505 Evalyn Ave.
  597.         Torrance CA 90503
  598.