home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CUG / SOFTT-5.LBR / CPRESS.RQT / CPRESS.RAT
Text File  |  2000-06-30  |  3KB  |  95 lines

  1. #-h-  cpress.r                   3024  local   12/15/80  13:17:58
  2. #-h-  cpress                     1161  local   12/15/80  11:50:40
  3.  ## cpress - compress input files
  4.   # These definitions are used by both the cpress and expand tools
  5.  
  6.  #must have RCODE > MAXCHUNK or RCODE = 0
  7.  define(MAXCHUNK,124)
  8.  define(RCODE,125)
  9.  define(THRESH,4)
  10.  #        include ratdef
  11.  DRIVER(cpress)
  12.  
  13.  character buf(MAXLINE)
  14.  integer getarg, open
  15.  integer i
  16.  #must have RCODE > MAXCHUNK or RCODE = 0
  17.  call query ('usage:  cpress [files].')
  18.  
  19.  for (i=1; ; i=i+1)
  20.         {
  21.         if (getarg(i,buf,MAXLINE) == EOF)
  22.                 {
  23.                 if (i != 1)
  24.                         break
  25.                 int = STDIN
  26.                 }
  27.         else if (buf(1) == MINUS & buf(2) == EOS)
  28.                 int = STDIN
  29.         else
  30.                 {
  31.                 int = open(buf,READ)
  32.                 if (int == ERR)
  33.                         call cant(buf)
  34.                 }
  35.         call press (int)
  36.         if (int != STDIN)
  37.                 call close(int)
  38.         }
  39.  DRETURN
  40.  end
  41. #-t-  cpress                     1161  local   12/15/80  11:50:40
  42. #-h-  press                      1101  local   12/15/80  11:50:41
  43.  ## press - compress file -int-
  44.  subroutine press (int)
  45.  character getch
  46.  character buf(MAXCHUNK), c, lastc
  47.  integer int, nrep, nsave
  48.  #must have RCODE > MAXCHUNK or RCODE = 0
  49.  
  50.  nsave = 0
  51.  for (lastc=getch(lastc,int); lastc != EOF; lastc = c)
  52.         {
  53.         for (nrep=1; getch(c,int) == lastc; nrep = nrep + 1)
  54.                 if (nrep >= MAXCHUNK)   #count repetitions
  55.                         break
  56.         if (nrep < THRESH)              #append short string
  57.                 for (; nrep > 0; nrep = nrep - 1)
  58.                         {
  59.                         nsave = nsave + 1
  60.                         buf(nsave) = lastc
  61.                         if (nsave >= MAXCHUNK)
  62.                                 call putbuf(buf, nsave)
  63.                         }
  64.         else
  65.                 {
  66.                 call putbuf(buf, nsave)
  67.                 call putc (RCODE)
  68.                 call putc(lastc)
  69.                 call putc(nrep)
  70.                 }
  71.         }
  72.  call putbuf(buf, nsave)                #put last chunk
  73.  return
  74.  end
  75. #-t-  press                      1101  local   12/15/80  11:50:41
  76. #-h-  putbuf                      366  local   12/15/80  11:50:41
  77.  ## putbuf - output buf(1) ... buf(nsave),  clear nsave
  78.  subroutine putbuf(buf, nsave)
  79.  character buf(MAXCHUNK)
  80.  integer i, nsave
  81.  
  82.  if (nsave > 0)
  83.         {
  84.         call putc (nsave)
  85.         for (i=1; i<=nsave; i=i+1)
  86.                 call putc(buf(i))
  87.         }
  88.  nsave = 0
  89.  return
  90.  end
  91. #-t-  putbuf                      366  local   12/15/80  11:50:41
  92. #-t-  cpress.r                   3024  local   12/15/80  13:17:58
  93. #-t-  cpress                     4063  local   01/09/81  00:44:51
  94.   if (nsave >= MAXCHUNK)
  95.