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