Annotation of researchv10dc/cmd/icon/ipl/source/delamc.icn, revision 1.1.1.1

1.1       root        1: #      DELAMC
                      2: #
                      3: #      Delaminate file using tab characters
                      4: #
                      5: #      Thomas R. Hicks
                      6: #
                      7: #      Last modified 2/9/86 by Ralph E. Griswold
                      8: #
                      9: 
                     10: procedure main(a)
                     11:    local tabset, fylist, nxtarg
                     12:    if match("-t",a[1]) then            # tab char given
                     13:       tabset := cset(a[1][3:0])
                     14:     if 0 = *(fylist := doutfyls(a)) then Usage()
                     15:     /tabset := cset(&ascii[10])                        # tab is default separator
                     16:     delamrc(tabset,fylist)                     # call main routine
                     17: end
                     18: 
                     19: # Usage - write usage message
                     20: #
                     21: procedure Usage()
                     22:     stop("usage: delamc [-tc] {outputfile | -} ...")
                     23: end
                     24: 
                     25: # delamrc - do actual division of input file using tab chars
                     26: #
                     27: procedure delamrc(tabset,fylist)
                     28:     local i, flen, line
                     29:     while line := read() do
                     30:         {
                     31:         i := 1
                     32:         flen := *fylist
                     33:         line ? while (i <= flen) do
                     34:             {
                     35:             if i = flen then
                     36:                 write(fylist[i][2],tab(0) | "")
                     37:             else
                     38:                 write(fylist[i][2],tab(upto(tabset)) | tab(0) | "")
                     39:             move(1)
                     40:             i +:= 1
                     41:             }
                     42:         }
                     43: end
                     44: 
                     45: # doutfyls - process output file arguments; return list
                     46: #
                     47: procedure doutfyls(a)
                     48:    local lst, x, i
                     49:    lst := []
                     50:    i := 2
                     51:    while \a[i] do {
                     52:       if x := llu(a[i],lst) then               # already in list
                     53:          lst |||:= [[a[i],lst[x][2]]]
                     54:       else                                     # not in list
                     55:          if a[i] == "-" then                   # standard out
                     56:             lst |||:= [[a[i],&output]]
                     57:          else                          # a new file
                     58:             if not (x := open(a[i],"w")) then
                     59:                stop("Cannot open ",a[i]," for output")
                     60:             else lst |||:= [[a[i],x]]
                     61:       i +:= 1
                     62:       }
                     63:    return lst
                     64: end
                     65: 
                     66: # llu - lookup file name in output file list
                     67: #
                     68: procedure llu(str,lst)
                     69:    local i
                     70:    i := 1
                     71:    while \lst[i] do {
                     72:       if \lst[i][1] == str then return i
                     73:       i +:= 1
                     74:       }
                     75: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.