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
/
lindcode.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
3KB
|
98 lines
############################################################################
#
# File: lindcode.icn
#
# Subject: Program to produce Icon code from L-system specifications
#
# Author: Ralph E. Griswold
#
# Date: August 19, 1993
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program reads a file of L-system specifications and build Icon
# code that creates a table of records containing the specifications.
#
# If the option -e is given, symbols for which there is no definition
# are included in the table with themselves as replacement.
#
############################################################################
#
# See also: lindrec.icn
#
############################################################################
#
# Links: options
#
############################################################################
link options
procedure main(args)
local allchar, rchar, line, prefix, symbol, rhs, file, name, spec
local value, c, opts, expand
opts := options(args, "e")
expand := opts["e"]
write(" linden := table()\n")
while line := read() do {
line ? {
if ="name:" then {
name := tab(0)
break
}
}
}
repeat {
allchar := rchar := ''
prefix := " linden[" || image(name) || "]"
write(prefix, " := lsys_0l(\"\", table(), 0, 90)")
while line := read() | exit() do
line ? {
if symbol := move(1) & ="->" then {
rchar ++:= symbol
rhs := tab(0)
write(prefix, ".rewrite[\"", symbol, "\"] := ", image(rhs))
allchar ++:= rhs
}
else if spec := tab(upto(':')) then {
move(1)
value := tab(0)
case spec of {
"axiom": {
allchar ++:= value
write(prefix, ".axiom := ", image(value))
}
"gener": write(prefix, ".gener := ", integer(value))
"angle": write(prefix, ".angle := ", real(value))
"length": write(prefix, ".length := ", integer(value))
"name": {
name := value
break
}
}
}
}
if \expand then {
allchar --:= rchar
every c := image(!allchar) do
write(prefix, ".rewrite[", c, "] := ", c)
}
}
end