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
/
mprocs
/
loadfile.icn
< prev
next >
Wrap
Text File
|
2001-05-02
|
2KB
|
65 lines
############################################################################
#
# File: loadfile.icn
#
# Subject: Procedure to produce and load program on the fly
#
# Author: Ralph E. Griswold
#
# Date: November 21, 1996
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# loadfile(exp, link, ...) produces and loads a program that generates
# the results of exp. The trailing arguments name link
# files needed for the expression. loadfile() returns a procedure
# that generates the results.
#
############################################################################
#
# Requires: MT-Icon, system(), pipes, /tmp
#
############################################################################
#
# Links: io
#
############################################################################
link io
procedure loadfile(exp, links[]) #: produce and load program
local output, prog
static name
output := tempfile("load", ".icn", "/tmp")
image(output) ? {
="file("
name := tab(find(".icn"))
}
write(output, "invocable all")
every write(output, "link ", image(!links))
write(output, "procedure main(args)")
write(output, " suspend ", exp)
write(output, "end")
close(output)
if system("mticont -o " || name || " -s " || name ||
" >/dev/null 2>/dev/null") ~= 0 then fail
remove(name || ".icn") # remove source code file
# Load the program
prog := load(name) | stop("*** load failure in loadfile")
return variable("main", prog)
end