home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / squsq / sq111.lbr / SQ111.DQC / SQ111.DOC
Text File  |  1988-01-27  |  3KB  |  113 lines

  1.                           File squeezer
  2.  
  3.                          Jim Lopushinsky
  4.  
  5.                     Edmonton, Alberta, Canada
  6.  
  7.                         February 16, 1984
  8.  
  9.  
  10. SQ has now been rewritten in assembly language.  As you will see,
  11. it operates much faster than the old SQ program.   SQ is now 8080
  12. compatable.
  13.  
  14. The program writer can utilize the squeezer by searching SQLIB in
  15. the link step.  Only 2 external refrences are needed:
  16.  
  17. SQINIT:    This is the analysis phase.   SQ reads the input file,
  18. and analyzes the file for squeezing.
  19.  
  20.      Input:    Register  HL contains the address of a scratch pad
  21.                for  SQ.   This area of ram must be at least  3072
  22.                (0C00h) bytes.
  23.  
  24.      Output:   Register A has the return code:
  25.  
  26.                     0    No errors
  27.                     1    Input file is already squeezed
  28.                     2    Input file is empty
  29.                     3    Squeezed  file  will be larger then  the
  30.                          input file.
  31.                     4    Squeeze table or bit length overflow.
  32.  
  33.                Register HL contains the size (in sectors) of  the
  34.                squeezed file.
  35.  
  36.                Register  DE contains the size (in sectors) of the
  37.                input file.
  38.  
  39.  
  40.  
  41.  
  42.  
  43. SQ:    This is the squeeze subroutine.   It reads the input  file
  44. again, and writes the squeezed file.
  45.  
  46.      Input:    Register  HL  contains the address of the FCB  for
  47.                the  original  file  (so that  it  can  write  the
  48.                filename in the squeezed file).
  49.  
  50.      Output:   Register A has the return code:
  51.  
  52.                0    No errors
  53.                1    Abnormal  EOF  when reading the input file  a
  54.                     second time.
  55.  
  56.  
  57.  
  58.  
  59. SQINIT  itself has 5 external refrences,  3 of which are resolved
  60. in SQLIB.  The 3 refrences in SQLIB are:
  61.  
  62.      MPBMUL    Multi-byte binary multiplication
  63.      MPBDIV    Multi-byte binary division
  64.      MPLSR     Multi-byte logical shift right
  65.  
  66.  
  67. SQINIT requires 2 external refrences from the calling program for
  68. byte  read and byte write.   These 2 subroutines are called  from
  69. SQINIT  and  SQ to input unsqueezed  characters,  and  to  output
  70. squeezed  bytes.   The 2 subroutines do not have to preserve  any
  71. registers, and must return control with a RET instruction.
  72.  
  73. RDBYTE:    This the byte input subroutine.   One byte of data  is
  74. passed back with each call to RDBYTE.
  75.  
  76.      Input:    none.
  77.  
  78.      Output:   Register A contains a byte of data for squeezing.
  79.  
  80.                Z flag clear (NZ true): byte of data passed.
  81.                Z flag set (Z true): end of file reached.
  82.  
  83.  
  84. WRBYTE:    This is the byte output subroutine.   One byte of data
  85. is passed to WRBYTE with each call.
  86.  
  87.      Input:    Register A contains a squeezed byte of data.
  88.  
  89.      Output:   none.
  90.  
  91.      The WRBYTE subroutine must perform its own error recovery or
  92.      termination.
  93.  
  94.  
  95.  
  96.  
  97. The main program should do the following:
  98.  
  99.      1.   Open the input file
  100.      2.   Call SQINIT
  101.      3.   Check for error return from SQINIT
  102.      4.   Re-open the input file
  103.      5.   Open the output file
  104.      6.   Call SQ
  105.      7.   Check for error return from SQ
  106.      8.   Close the output file
  107.  
  108.  
  109.  
  110. If there are any questions or comments, I can be reached at:
  111.  
  112.      (403) 484-5981    6:00 pm - 10:00 am @ 300/1200 baud
  113.