home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
ineeds.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
2KB
|
87 lines
############################################################################
#
# File: ineeds.icn
#
# Subject: Program to print modules required by an Icon program
#
# Author: Robert J. Alexander
#
# Date: May 18, 1994
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
#
# Program to determine Icon modules required by an Icon module. Expects
# environment variable LPATH to be set properly as for the Icon Compiler.
#
############################################################################
procedure main(arg)
local linkSet,doneSet,fn,f,line,linkName,libSet,a
libSet := set()
linkSet := set()
while a := get(arg) do {
if match("-I",a) then {
insert(libSet,"" ~== a[3:0] | get(arg))
}
else insert(linkSet,a)
}
every insert(libSet,PathDirs())
doneSet := set()
while fn := !linkSet do {
delete(linkSet,fn)
insert(doneSet,fn)
f := open(("" | !libSet) || fn || ".icn") | {
write(&errout,"Can't find \"",fn,"\"")
next
}
while line := read(f) do line ? {
if ="link" & tab(many(' \t')) then {
while linkName := trim(tab(upto(', \t#')) |
(not pos(0),tab(0)),' \t') do {
if not member(doneSet,linkName) then insert(linkSet,linkName)
if not ="," then break
tab(many(' \t'))
}
}
}
close(f)
}
every write(!sort(doneSet))
end
procedure PathDirs(s)
#
# Generate the directory names in a "path" string.
#
local pathDir
static pathSep,fileSep
initial {
if match("MS-DOS" | "OS/2",&features) then {
pathSep := ";"
fileSep := "\\"
}
else if match("Macintosh",&features) then {
pathSep := ","
fileSep := ":"
}
else if match("UNIX",&features) then {
pathSep := ":"
fileSep := "/"
}
}
/s := getenv("LPATH")
\s ? {
until pos(0) do {
pathDir := tab(find(pathSep) | 0)
if not match(fileSep,pathDir,-1) then pathDir ||:= fileSep
suspend "" ~== pathDir
move(*pathSep)
}
}
end