Department of Computer
Science The University of Arizona Tucson, Arizona IPD247c March 10, 1996 http://www.cs.arizona.edu/icon/docs/ipd247.htm |
These files should be located at a place on youricont.exe translator iconx.exe executor ixhdr.exe bootstrap header
PATH
specification.
In addition, icont.exe
and ixhdr.exe
must be in
the same directory.icont
and iconx
: ones without
large-integer arithmetic and ones with it. The former are named icont.exe
and iconx.exe
as distributed, while the latter are named icontl.exe
and iconxl.exe
. The distribution is contained in several files
in LHA format. These files have the extension lzh
. If you do
not have a copy of lha.exe
, execute the self-extracting archive
lha213.exe
on the distribution diskette. This will produce
lha.exe
and documentation.To install thedocs.lzh documents icon.lzh executable binary files readme installation overview and recent notes samples.lzh Icon programs and data
.exe
files, set your current directory to the
desired place, place the appropriate distribution diskette in a drive, and
dearchive the files there using lha.exe
. For example, using
drive A
to dearchive the executable binary files, the following
will do:
The same technique can be used for extracting the remaining files.a:lha x a:icon.lzh
icont.exe
and iconx.exe
if necessary. For example, if you want the executor that supports large-integer
arithmetic, the following will do:
rename icontl.exe icont.exe rename iconxl.exe iconx.exe
.icn
.
Such files should be plain text files (without line numbers or other extraneous
information).icont
, produces an "icode" file
that is executed using iconx.ex
e. There are two forms of icode
files:iconx.exe
automatically
when they are run. These icode files have the extension exe
.iconx
with the
icode file as an argument. These icode files have the extension icx
.iconx.exe
to run.
prog.icn
is translated by
If your translator is named differently, simply use that name. For example, if your translator is namedicont prog.icn
icontl.exe
, use
The result is an icode file with the nameicontl prog.icn
prog.exe
. This file
can be run by
Alternatively,prog
icont
can be instructed to execute the icode
file after translation by appending a -x
to the command line,
as in
This only works if your executor is namedicont prog.icn -x
iconx.exe
, since
the -x
option looks for this name. In the sections that follow,
it is assumed that the executor is named iconx.exe
.icont
is run with the -x
option, the file prog.exe
is left and can be run subsequently using an explicitly named executor as
described above..icn
is optional on the command line. For example,
it is sufficient to use
icont prog
-I
,
as in
The result is an icode file namedicont -I prog
prog.icx
. It can be run by
Note that theiconx prog
icx
extension is not necessary.iconx
will find an icode file if it is in the current directory
or at place given on your PATH
specification.hello.icn
This program prints the Icon version number, time, and date.
Run this test as
icont hello hello
icont hello -x
cross.icn
This program prints all the ways that two words intersect in
a common character. The file cross.dat
contains typical data.
Run this test as
icont cross -x <cross.dat
meander.icn
This program prints the "meandering strings" that contain
all subsequences of a specified length from a given set of characters. Run
this test as
icont meander -x <meander.dat
roman.icn
This program converts Arabic numerals to Roman numerals. Run
this test as
icont roman -x
icont
translator supports a variety
of options that may be useful in special situations. There also are several
aspects of execution that can be controlled with environment variables.
These are listed here. If you are new to Icon, you may wish to skip this
section on the first reading but come back to it if you find the need for
more control over the translation and execution of Icon programs.
runs the icode fileiconx prog text.dat log.dat
prog.icx
, passing its main procedure a
list of two strings, "text.dat"
and "log.dat"
.
The program also can be translated and run with these arguments with a single
command line by putting the arguments after the -x
:
These arguments might be the names of files thaticont prog -x text.dat log.dat
prog.icn
reads.
For example, the main procedure might begin as follows:
procedure main(args) in := open(args[1]) | stop("cannot open file") out := open(args[2]) | stop("cannot open file") . . .
icont
translator can accept several Icon source files at
one time. When several files are given, they are translated and combined
into a single icode file whose name is derived from the name of the first
file. For example,
translates the filesicont prog1 prog2
prog1.icn
and prog2.icn
and
produces one icode file, prog1.exe
.-o
option, followed by the desired
name. For example,
produces the icode file namedicont -o probe prog
probe.exe
rather than prog.exe
.-c
option is given to icont
, the translator
stops before producing an icode file and intermediate "ucode"
files with the extensions left for future use (normally they are deleted).
For example,
leavesicont -c prog1
prog1.u1
and prog1.u2
, instead of producing
prog1.exe
. These ucode files can be used in a subsequent icont
command by using the .u1
name. This saves translation time
subsequently. For example,
translatesicont prog2 prog1.u1
prog2.icn
and combines the result with the ucode
files from a previous translation of prog1.icn
. Note that only
the .u1
name is given; the .u2
name is implied.
The extension can be abbreviated to .u
, as in
Ucode files also can be added to a program using a link declaration.icont prog2 prog1.u
-
signifies the use of standard input as a source file. In this case, the
ucode files are named stdin.u1
and stdin.u2
and
the icode file is named stdin.exe
.-s
option. Normally, both informative messages and error
messages are sent to standard error output.-t
option causes &trace
to have an initial
value of -1 when the icode file is executed. Normally, &trace
has an initial value of 0.-u
causes warning messages to be issued for undeclared
identifiers in the program.
TRACE
(undefined)
&trace
. If this
variable has a value, it overrides the translation-time -t
option.NOERRBUF
(undefined)
&errout
is not buffered.STRSIZE
(65000)
BLKSIZE
(65000)
COEXPSIZE
(2000)
MSTKSIZE
(10000)
QLSIZE
(5000)
"p"
option. seek()
may not reflect the actual byte position because of the translation of carriage-return/line-feed
sequences to line-feed characters. /
or
a \
. Examples are:
A:\ICON\TEST.ICN
A:/ICON/TEST.ICN
For example,console CON printer PRN LST LPT LPT1 auxiliary port AUX COM RDR PUN null NUL NULL
causes strings written to prompt to be displayed on the console. Use of a null file name means no file is created.prompt := open("CON", "w")
Int86(L)
generates a hardware interrupt. The input is a list
of integer values: [interrupt number, ax, bx, cx, dx, si, di, es,
ds]
. It returns a list of the form [flags, ax, bx, cx, dx,
si, di, es, ds]
. Great care must be taken in using this function.
Some things to watch out for are:
open(s)
function -- that is, closing, seeking, reading, or writing.InPort(i)
returns an integer from hardware port i
.OutPort(i1, i2)
writes value i2
to hardware port
i1
.GetSpace(i)
allocates a static block of storage outside of
Icon's direct control (that is, it is not be affected by garbage collection).
This function simply calls the malloc() allocation routine and returns
the address of the resulting block as a long integer.FreeSpace(A
) frees a static block of storage, where A
is a value returned by GetSpace(i
). No check is make to verify
that the block was allocated by GetSpace(i)
. The results are
unpredictable if it was not. Arithmetic should not be performed directly
on a value returned by GetSpace(i)
.Peek(A, i)
builds a string pointing to the address specified
by A
with a length of i
, where A
is either an integer that specifies a linear address value or a list of
the form [segment, offset]
and i
is a length (default
1). This is the only way of "seeing" the contents of a block of
storage allocated by GetSpace(i)
. Consider the following example:
The value ofblock := Peek(addr := GetSpace(100),100)
block
is a string of length 100 and addr
is the linear address of the block.Peek(A, i)
does not move data into Icon's memory region. Instead,
it builds a string qualifier that points to the data.Poke(A, s)
copies a string s
to location A
,
where A
is an address specified in the same way as for Peek(A,
s)
and s
is a string to be copied to that storage location.
The string is copied directly into storage, byte by byte. No conversion
is performed. This is the only way of assigning data to a block of storage
allocated by GetSpace(i)
.
-x
option is not supported by some versions of MS-DOS Icon.-x
option
to icont
. This can be avoided running the icode file as a separate
step. Also, if there is not enough free RAM, the system()
function
may fail silently or hang.
Icon Project
Department of Computer Science
The University of Arizona
P.O. Box 210077
Tucson, AZ 85721-0077
U.S.A.
(520) 621-6613 (voice)
(520) 621-4246 (fax)
icon-project@cs.arizona.edu
The Icon Programming
Language, Prentice-Hall, Inc., Englewood Cliffs, NJ, second edition,
1990.
Version
9.1 of the Icon Programming Language, The Univ. of Arizona Icon Project
Document IPD267, 1995.