|
|
1.1 ! root 1: # I-SPLIT(1) ! 2: # ! 3: # Split Icon program into separate files ! 4: # ! 5: # Ralph E. Griswold ! 6: # ! 7: # Last modified 5/28/83 ! 8: # ! 9: ! 10: procedure main(o) ! 11: local line, x, i, proctable, proclist, comments, gfile, ofile ! 12: comments := [] ! 13: if o[1] := "-g" then gfile := open(o[2],"w") | ! 14: stop("usage: i-split [-g file]") ! 15: proctable := table() ! 16: while line := read() do { ! 17: if line ? { ! 18: ="procedure" & # procedure declaration ! 19: tab(many(" ")) & ! 20: proctable[tab(upto("("))] := x := [] ! 21: } then { ! 22: while put(x,get(comments)) # save it ! 23: put(x,line) ! 24: i := 1 ! 25: while line := read() do { ! 26: put(x,line) ! 27: if line == "end" then break ! 28: } ! 29: } ! 30: # other declarations ! 31: else if \gfile & line ? =("global" | "record" | "external") ! 32: then { ! 33: while write(gfile,get(comments)) ! 34: write(gfile,line) ! 35: } ! 36: else put(comments,line) ! 37: } ! 38: while write(\gfile,get(comments)) ! 39: proclist := sort(proctable) # sort procedures ! 40: if *proclist > 1 then ! 41: every i := 1 to *proclist do # get main procedure to front ! 42: if proclist[i][1] == "main" then { ! 43: proclist := proclist[i+:1] ||| proclist[1:i] ||| proclist[i + 1:0] ! 44: break ! 45: } ! 46: every x := !proclist do { # output procedures ! 47: ofile := open(x[1] || ".icn","w") | stop("cannot write ",x[1],".icn") ! 48: every write(ofile,!(x[2])) ! 49: close(ofile) ! 50: } ! 51: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.