Notable changes in this latest version are listed here. Some code
cleanup work and documentation editing has also been done.
256-color limit removed
Icon's X-windows interface previously limited each window to 256
colors at one time. This limitation has been removed for the TrueColor
displays provided by most modern computers. Median-cut quantization is
used to select 256 image colors when WriteImage() is called to write a
GIF file.
Library changes
As usual, several files in the Icon program library have been added or
edited. The core library files, however, remain stable.
Minor changes
* The command "icon - [args]" can now be used to execute a source
program read from standard input.
* A new "icont -N" flag suppresses embedding of an iconx path in the
generated executable
* The configuration directory has been restructured.
* Several obsolete configurations have been removed.
* The environment variables HEAPSIZE and BLOCKSIZE no longer
function as undocumented alternatives to BLKSIZE. The GNU ls
utility uses BLOCKSIZE for other purposes, leading to confusion.
* "make Install" has been changed to never delete anything. It now
creates a new directory rather than altering an existing one.
Changes:
* Support for NetBSD on PowerPC based systems.
* An Icon source file can be made executable under Unix by prefixing it
with a comment line
#!/usr/bin/env icon
and setting its execute permission bit. This uses a new icon command,
which in another form allows a small Icon program to be embedded within
a shell script. See the new man page for details. The traditional icont
command remains available for less specialized purposes.
* The performance of large sets and tables has been improved.
* Some minor bugs have been fixed.
Version 9.4 of Icon is a modified and repackaged implementation based
on version 9.3.2 of Icon. The changes make it easier to maintain,
install, and use under Unix while retaining potential portability to
other systems. Most significant are changes to path searching,
described below, and the inclusion of the Icon program library as a
standard part of all Unix source and binary distributions.
The Icon language is unchanged, and this 9.4 Unix implementation
remains compatible at the source level with Icon 9.3 for Windows.
Recent feature additions
New features added since the publication of the Icon books are
described below.
Reading foreign text files
(new with Version 9.3.1 of Icon)
The function read() recognizes three kinds of line terminators when
reading a file opened in translated mode: Windows (CR+LF), Macintosh
(CR), or Unix (LF). Consequently, text files created on one platform
can be read by an Icon program running on a different platform.
Reading directory contents
(new with Version 9.3.2 of Icon)
The files in a directory can be listed by opening the directory as a
file. Subsequent reads return the names of the files contained in the
directory. The names are returned in no particular order, and for
Unix, the directories "." and ".." are included.
Path searching
(new with Version 9.4 of Icon)
Under Unix, colons (:) may now separate directories in the LPATH and
IPATH environment variables as an alternative to spaces. The Icon
translator and linker search these paths when looking for $include and
link files respectively.
The Icon program library is now searched automatically, but LPATH and
IPATH can still be set to control the search order. For version 9.4,
the effective path in each case is:
1. the current directory
2. any directories named by the environment variable
3. the Icon library directory
Other changes affect the configuration of Icon at installation time
and the way executable Icon programs locate the interpreter. These
changes, which are transparent to most users, are discussed in more
detail on the [2]File Organization page.
Other Icon Changes
Several areas of the Icon implementation have been cleaned up, in
particular the run-time initialization code, and some obsolete
configurations have been removed.
With one clearly marked exception, programs in the standard test suite
now generate reproducible output.
The following problems have been corrected:
* The sign bit was lost when converting a real to a large integer.
* A duplicate close(f) could crash the interpreter.
* Very large coordinate values were silently mishandled.
* Window attributes over 127 characters long caused a segfault.
* A segfault during traceback could produce an infinite loop.
* A file inclusion bug in gcc 2.96 prevented Icon from building.
Library Changes
The program library has been incorporated into the main Icon source
tree and is routinely built along with icont and iconx. Tests for most
of the core library functions and loadable C functions have been
incorporated the standard test suite, and some additional consistency
tests were developed.
Numerous changes were made throughout the library to fix linking
problems, to fix typos and formatting, and to support building via
Makefiles.
Some files that were miscategorized as graphics or non-graphics have
been moved. Duplicate files in the cfuncs and packs/loadfunc
directories have been eliminated. Some other obsolete files were also
removed.
Other significant changes were:
procs/datetime fixed dayoweek() to get all twelve months right
procs/factors fixed divisors() to consistently return all factors
fixed genfactors() for some failing cases
added some minor optimizations
procs/genrfncs added several new sequence generators
procs/io modified to allow ":" as a path separator under Unix
procs/lists fixed fatal bugs in lminlen() and lmaxlen()
added several new list manipulation procedures
procs/lstfncs added: procedures to produce lists from sequences
procs/numbers fixed decimal() for values where remainder repeats
procs/pdco added several new control operations
procs/periodic added: procedures related to periodic sequences
procs/permutat added: procedures for permutations
procs/polynom added: manipulate multi-variate polynomials
procs/pqueue added new priority queue procedures
procs/rational added real2rat(v, p) #: convert real to rational
added medrat(r1, r2) #: rational mediant
procs/records added fieldnum(R, s) #: return index of field R.s
procs/seqops replaced: procedures to manipulate T-sequences
procs/strings modified fchars() to break ties lexically
renamed permute() to permutes()
cfuncs/icall.h fixed reading of misaligned doubles by RealVal()
cfuncs/fpoll.c support fpoll() under BSD Unix flavors
gprocs/drawlab modified to let the caller control the window size
progs/htprep modified to improve quoting
progs/ipatch modified to understand v9.4 headers as well as v9.3
progs/unclog added: program to reformat CVS logs
gprogs/breakout added: a new breakout game
gprogs/dlgvu modified to allow interruption while drawing labels
gprogs/gallery modified to recognize some nonstandard JPEG files
gpacks/tiger modified to allow interruption of drawing
gpacks/xtiles fixed the usage message
packs/loadfunc/cspace increased the default window size
For the Icon source code, this is primarily a maintenance release. The
code has been reworked and simplified to increase portability. An ANSI
C compiler is now required, and UNIX systems are expected to supply a
POSIX (1003.1-1988) library.
Version 9.3.2 adds one new feature:
The files in a directory can be listed by opening the directory as a
file. Subsequent reads return the names of the files contained in the
directory. The names are returned in no particular order, and for UNIX,
the directories "." and ".." are included.
pages that are installed will be gzip-compressed, if MANZ is set, or
not if MANZ is not set. If the package uses bsd-style .mk files, the
variable MANCOMPRESSED_IF_MANZ should be set to a value of "yes" in
the package Makefile. This replaces the previous method of specific
inclusion of bsd.prefs.mk, followed by a check for MANZ and
conditional assignment of MANCOMPRESSED.
Add appropriate documentation, and change all necessary ocurrences in
package Makefiles.
- New, optional Makefile variable HOMEPAGE, specifies a URL for
the home page of the software if it has one.
- The value of HOMEPAGE is used to add a link from the
README.html files.
- pkglint updated to know about it. The "correct" location for
HOMEPAGE in the Makefile is after MAINTAINER, in that same
section.