home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / cug / softt-6.lbr / LAM.RQT / LAM.RAT
Text File  |  1984-07-05  |  3KB  |  88 lines

  1. #-h-  lam.r                      2256  local   12/24/80  12:29:09
  2. # lam - laminate named files
  3.  DRIVER(lam)
  4.  
  5.  # include ratdef
  6. define(MAXARGS,12)      # max nbr args (files and strings) allowed
  7. define(MAXBUF,200)    # buffer to hold strings
  8. define(MAXOBUF,500)    # output buffer
  9.  
  10.    character lin(MAXLINE), buf(MAXBUF), obuf(MAXOBUF)
  11.    integer bp, obp, i, j, junk, nfiles, len, fd(MAXARGS)
  12.    integer open, getarg, getlin, esc, addset
  13.  
  14.    bp = 1
  15.    nfiles = 0
  16.    call query ("usage:  lam [-<string> | file].")
  17.    for (i = 1; getarg(i, lin, MAXLINE) ^= EOF; i = i + 1) {
  18.       if (i > MAXARGS)
  19.          call error("too many arguments.")
  20.       if (lin(1) == MINUS & lin(2) ^= EOS) {    # -string
  21.          fd(i) = -bp
  22.          for (j = 2; lin(j) ^= EOS; j = j + 1)
  23.             junk = addset(esc(lin, j), buf, bp, MAXBUF)
  24.          if (addset(EOS, buf, bp, MAXBUF) == NO)
  25.             call error("too many strings.")
  26.          }
  27.       else {
  28.          nfiles = nfiles + 1
  29.          if (lin(1) == MINUS)
  30.             fd(i) = STDIN
  31.          else
  32.             fd(i) = open(lin, READ)
  33.          if (fd(i) == ERR)
  34.             call cant(lin)
  35.          }
  36.       }
  37.  
  38.    if (nfiles == 0) {
  39.       nfiles = 1
  40.       fd(i) = STDIN
  41.       }
  42.    else
  43.       i = i - 1
  44.    n = i
  45.  for (obp = 1; nfiles > 0; obp = 1)
  46.    {
  47.    for (i = 1; i <= n; i = i + 1)
  48.       {
  49.       if (fd(i) < 0 )           # do string
  50.          {
  51.          for (j = -fd(i); buf(j) ^= EOS; j = j + 1)
  52.             {
  53.             if ( addset(buf(j), obuf, obp, MAXOBUF) == NO)
  54.                   call error ('output buffer exceeded.')
  55.             }
  56.          }
  57.       else if (fd(i) ^= EOF)
  58.          {
  59.          len = getlin(lin, fd(i))
  60.          if (len == EOF)
  61.             {
  62.             nfiles = nfiles - 1
  63.             if (fd(i) ^= STDIN)
  64.                call close(fd(i))
  65.             fd(i) = EOF
  66.             }
  67.          else
  68.             {
  69.             for (j = 1; j < len; j = j + 1)
  70.                {
  71.                if ( addset(lin(j), obuf, obp, MAXOBUF) == NO)
  72.                     call error ('output buffer exceeded.')
  73.                }
  74.             }
  75.          }
  76.       }       # end of second 'for' loop
  77.    if (nfiles > 0)
  78.       {
  79.       for (j = 1; j < obp; j = j + 1)
  80.          call putch(obuf(j), STDOUT)
  81.       call putch(NEWLINE, STDOUT)
  82.       }
  83.    }           # end of main 'for' loop.
  84.   DRETURN
  85. end
  86. #-t-  lam.r                      2256  local   12/24/80  12:29:09
  87. #-t-  lam                        4379  local   12/24/80  12:34:28
  88. uf(j), obuf, obp,