Annotation of 43BSD/contrib/icon/src/cmd/delamc.icn, revision 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.