Annotation of 43BSD/contrib/icon/src/cmd/i-trfil.icn, revision 1.1

1.1     ! root        1: #      I-TRFIL(1)
        !             2: #
        !             3: #      Icon trace filter
        !             4: #
        !             5: #      Allan J. Anderson
        !             6: #
        !             7: #      Last modified 7/10/83
        !             8: #
        !             9: 
        !            10: global buffer, ylist, nlist, yylist, priorlines, followlines
        !            11: 
        !            12: procedure main(a)
        !            13:    local s, n, i
        !            14:    initial {
        !            15:       ylist := []
        !            16:       nlist := []
        !            17:       yylist := []
        !            18:       buffer := []
        !            19:       priorlines := followlines := 0
        !            20:       }
        !            21:    every s := !a do
        !            22:       if s[1+:2] == ("-c" | "-C") then {
        !            23:         if n := integer(s[3:0] | a[i + 1]) then {
        !            24:            if n = 0 then priorlines := followlines := 0
        !            25:            else if n < 0 then priorlines := abs(n)
        !            26:            else if n > 0 then followlines := n
        !            27:            }
        !            28:         }
        !            29:       else if s[1] == "+" then
        !            30:         if *s <= 1 then next
        !            31:         else put(ylist,s[2:0])
        !            32:       else if s[1] == "^" then
        !            33:         if *s <= 1 then next
        !            34:         else put(nlist,s[2:0])
        !            35:       else if s[1] == "!" then
        !            36:         if *s <= 1 then next
        !            37:         else put(yylist,s[2:0])
        !            38:       else if not integer(s) then stop(
        !            39:         "usage: trfil +includestring ^excludestring !keepstring -cn <infile")
        !            40:    while trfil(read())
        !            41: end    # main
        !            42: 
        !            43: procedure trfil(line)
        !            44:    if *buffer > priorlines then get(buffer)
        !            45:    put(buffer,line)
        !            46:    if (*ylist = 0) | find(!ylist,line) then delcheck(line)
        !            47:    return
        !            48: end
        !            49: 
        !            50: procedure delcheck(line)
        !            51:    local n
        !            52:    if find(!nlist,line) then 
        !            53:       if not find(!yylist,line) then return
        !            54:    every write(get(buffer))
        !            55:    n := followlines
        !            56:    while n > 0 do {
        !            57:       if find(!ylist,line) & (not find(!nlist,line)) then
        !            58:         n := followlines
        !            59:       else n -:= 1
        !            60:       if *buffer < priorlines then put(buffer,line)
        !            61:       write(line)
        !            62:       if *buffer >= priorlines then get(buffer,line)
        !            63:       line := read()
        !            64:       }
        !            65:    if (priorlines > 0 | followlines > 0) then write("\t")
        !            66: end

unix.superglobalmegacorp.com

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