############################################################################ # # File: ipldoc.icn # # Subject: Program to collect library documentation # # Author: Ralph E. Griswold # # Date: November 26, 1996 # ############################################################################ # # This file is in the public domain. # ############################################################################ # # This program collects selected information from documentation headers # for Icon procedure files named on the command line. # # The following options are supported: # # -s skip file headers # -f sort procedure list by file; default sort by procedure # name # ############################################################################ # # Links: options, sort # ############################################################################ link options link sort record ref(proc, file) procedure main(args) local procedures, file, program, line, dir, input, max local reference, opts, writep, way1, way2 opts := options(args, "sf") writep := if \opts["s"] then 1 else write if \opts["f"] then { way1 := 2 way2 := 1 } else { way1 := 1 way2 := 2 } procedures := set() every file := !args do { program := open(file) | { write(&error, "*** cannot open program ", image(file)) next } writep() writep() while line := read(program) | break do if *line = 0 then break else writep(line) while line := read(program) | break do line ? { if ="procedure" then { tab(many(' \t')) if ="main(" then next insert(procedures, ref(tab(upto(')') + 1), file)) } } close(program) } writep() writep(repl("=", 76)) writep() write("Procedure List") write() max := 60 procedures := sortff(procedures, way1, way2) every reference := !procedures do write(left(reference.proc, max), reference.file) end