# Release Notes for Version 9.4 of Icon

Gregg M. Townsend
Department of Computer Science
The University of Arizona

www.cs.arizona.edu/icon/v940/relnotes.htm
Last updated June 11, 2001

## Introduction

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 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

## Other Documentation

See the documentation guide for an overview of the available Icon documentation.

For installation instructions, see Installing Binaries or Building from Source as appropriate.