Annotation of 43BSD/contrib/icon/src/cmd/delamc.icn, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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