Icon 9.0 for OpenVMS VAX 7.3 -- kit, 12-OCT-2026 ================================================ Douglas P. Fields, Jr. (symbolics@lisp.engineer) Icon Version 9.0, the University of Arizona's VMS distribution of July 1994: the translator (ICONT), the interpreter (ICONX), the compiler (ICONC, which makes C), the Icon program library translated, the documents and the sources, rebuilt from the Icon Project's sources on OpenVMS VAX V7.3 with Compaq C V6.4, without the X Window graphics facilities, as a BACKUP saveset with a DCL installer and a DCL uninstaller. The target machine needs no compiler to translate and run Icon programs; ICONC needs Compaq C (or VAX C) on the target, as the compiler makes C. Icon is in the public domain. The changes made for this kit are listed in section 6 and are mine, not the Icon Project's. 1. FILES ICON_VAX_20261011.BCK The kit: 17,515,008 bytes, 1,722 entries (1,698 files and the directory files), 29,373 blocks installed. ICON_INSTALL.COM Installer. ICON_UNINSTALL.COM Uninstaller. ICON_VAX_20261011_LIST.LIS BACKUP/LIST of the saveset: every file, with size and date. icon-9.0-openvms-vax-source-kit-20261011.zip The Icon Project's original distribution (the DECUS zip, unmodified), its text files as shipped, the five changed files whole and as diffs, the build and kit procedures, the host tools and the recipe to recreate the kit from scratch. icon-9.0-openvms-vax-examples-20261011.zip Eleven example programs and their tests, with expected output. SHA256SUMS.TXT SHA-256 of every file above. README.TXT This file. You need the saveset and the two procedures. 2. REQUIREMENTS * OpenVMS VAX V7.3. (Tested on nothing else.) * SYSTEM, or another account with SYSPRV, to install or uninstall. * The system disk: the kit installs to SYS$COMMON:[SYSLIB.ICON...] and nowhere else. About 70,000 blocks should be free while installing (the saveset, 34,209 blocks, plus the 29,373-block tree plus cluster rounding: an estimate from the sizes; the installer does not check). * To use ICONC: Compaq C V6.x on the target machine. ICONT and ICONX need nothing. Nothing system-wide is changed: no startup file, SYLOGIN, DCLTABLES, system logical name, installed image, UAF record or quota -- and not STARLET. 3. INSTALLING 1. Copy the saveset and both .COM files into one directory on the system disk of the VAX. TRANSFER MODES MATTER. Send the .BCK saveset in BINARY. Send the .COM files as TEXT (FTP "ascii"). A procedure sent in binary arrives as 512-byte fixed records and DCL refuses it (%RMS-W-RTB). 2. A binary transfer loses the saveset's record attributes (FTP leaves it as fixed 512-byte records, RCP as Stream_LF). The installer puts them back itself; to BACKUP/LIST the saveset first, do it yourself: $ SET FILE/ATTRIBUTE=(RFM:FIX,LRL:32256,MRS:32256,RAT:NONE) - ICON_VAX_20261011.BCK 3. As SYSTEM, in that directory: $ @ICON_INSTALL or, over an existing installation of this kit: $ @ICON_INSTALL "" REPLACE The installer checks privilege and the saveset, restores the tree with BACKUP/VERIFY through a concealed root (the tree has directories nine levels deep, more than BACKUP accepts under a deep home directory), sets owner and protection, writes a manifest of every file it installed (ICON_MANIFEST.LIS in the top directory) and runs a smoke test in a subprocess (translate and run a program). It took 79 to 88 seconds on a simulated MicroVAX 3900 and 3 minutes 8 seconds on a VAXstation 4000/96. It refuses, changing nothing, without SYSPRV, for a missing saveset, or if the tree exists and REPLACE was not given. 4. Each user, at the prompt or in LOGIN.COM: $ @SYS$COMMON:[SYSLIB.ICON]ICON_SETUP $ ICONT HELLO ! HELLO.ICN -> HELLO.ICX $ ICONX HELLO ! run it $ ICONT -x HELLO ! translate and run $ ICONC HELLO ! compile to HELLO.EXE (needs Compaq C) $ HELP ICONT ! also ICONX, ICONC ICON_SETUP defines ICON_BIN and ICON_IPL, the commands ICONT, ICONX, ICONC and IEXE, IPATH and LPATH (the program library and its includes), the help library as the first free HLP$LIBRARY and the C library as the first free LNK$LIBRARY, for that process only. Options come before file names: ICONT -s HELLO. ICONX reads standard input as SYS$INPUT and writes SYS$OUTPUT: give "file" arguments (quoted in DCL) or DEFINE/USER them. 4. UNINSTALLING As SYSTEM, in the directory holding ICON_UNINSTALL.COM: $ @ICON_UNINSTALL CHECK ! report only, changes nothing $ @ICON_UNINSTALL ! remove Icon It deletes only files the manifest lists, one explicit file;version at a time, and only if each still has the size and revision date it was installed with; then the directories left empty, deepest first, then the manifest. Anything else in the tree stays and is listed ("kept (changed)", "kept (not empty)"): files you changed, programs you added. The exit status is 4 if anything was kept. It refuses, changing nothing, if the manifest is missing or damaged. A second run says "not installed". Tested many times on simulators (a lifecycle test, section 8), and on a VAXstation 4000/96: CHECK found "would remove 1698 files, keep 0, 0 already missing". 5. CHECKING THE INSTALLATION As an ordinary user, after ICON_SETUP: $ @SYS$COMMON:[SYSLIB.ICON.EXAMPLES]RUN_TESTS translates and runs each example program in [.ICONTEST] under your login directory, compiles QUEENS with ICONC, runs a program-library test and a program that must be rejected, and compares each output with an expected file made by independent Python code. It ends "PASS 13 of 13" (8 seconds on the simulator, 29 seconds on the VAXstation 4000/96). One line, "%DCL-W-IVVERB ... \THISISNOTACOMMAND\", is normal: VMSINFO runs a deliberately wrong command to check the exit status. The examples are also in the examples zip, with their README. 6. WHAT IS DIFFERENT FROM THE DISTRIBUTION The sources are those of the Icon Project's July 1994 VMS release, with five changes, all marked as ours in SOURCES.TXT of the installed tree and in the source kit: 00 src/h/define.h the line "#define Graphics 1" removed (the Icon Project's own instruction for a machine without DECwindows, IPD250 step 3) 01 src/common/time.c struct tms declared only #ifndef __DECC 02 src/runtime/make-icont.com object XRGFSYS corrected to XRGFXSYS (a typo in the shipped procedure), and VMSCALL linked in 03 src/runtime/init.r MAXMEM lookup only without FixedRegions (an undefined MEMSIZE otherwise) 04 src/runtime/extcall.r, src/vms/vmscall.c (new) callout(): VMS system services from Icon Build flags, not source changes: CC/STANDARD=VAXC with getopt, optarg, optopt, popen and pclose renamed (they collide with the C library's). callout(name, args...) is the one addition: vms_getjpi, vms_getsyi, vms_trnlnm, vms_time, vms_getmsg, implemented in src/vms/vmscall.c. The compiler (ICONC) does not have the hook. The distribution's prebuilt images need the DECwindows X library (the shipped ICONX.EXE stops with %SYSTEM-F-PROTINSTALL on a machine without it); that is why this kit is built from the sources, without graphics. 7. KNOWN LIMITS * No graphics (the X Window facilities). The sources are in [SRC]. * loadfunc() is UNIX only in Icon 9.0; callout() is the substitute. * Co-expressions nest only so far: a chain of 50 works, 75 ends in an access violation with the default COEXPSIZE of 2000 words. DEFINE COEXPSIZE 8000 is good for at least 100. * system() returns the VMS status (196609, %X30001, for success), not 1. * A pipe started with open(cmd, "rp") inherits SYS$OUTPUT: use ICONX's ">file" argument, not DEFINE/USER SYS$OUTPUT, for a program that starts subprocesses. * HELP ICON finds the system's ICONV help first: use HELP ICONT, HELP ICONX or HELP ICONC. * ICONC prints a harmless %CC-W-RESTRICTNOP warning from the run-time header. One program (QUEENS) was compiled and run with it. * The Icon Project's own tests ([V9.TESTS], "about 20 minutes for ICONT" in IPD250) were not run; the 13 checks above are mine. * Not Icon 9.3 or later: the archives hold no VMS port of them. * Terminal and batch only. 8. HOW IT WAS BUILT AND TESTED Built on a simulated MicroVAX 3900 (Open SIMH) running OpenVMS VAX V7.3 with Compaq C V6.4-005, from the Icon Project's VMS saveset (vms_icon_v9.zip, DECUS LT94B, 4-AUG-1994; SHA-256 b359615607c3cac261d6d1b92604da07faeb0ce1ee9a01580ce94460a51fe440). Times on the simulator: restore the saveset 65 s; interpreter, run-time library and compiler 7 min 30 s; the program library (574 programs and procedures) 2 min 7 s; the kit 36 s. REBUILD.md in the source kit has the commands, results and hashes. Tests: RUN_TESTS 13 of 13; the lifecycle test (install, refuse a second install, CHECK, change and add files, uninstall which keeps them, REPLACE, clean uninstall, reinstall) 21 of 21, on the simulator. The kit was installed system-wide on a VAXstation 4000/96 on 12-OCT-2026 and RUN_TESTS passed 13 of 13 as an ordinary user there. It has not been run on another real machine. The kit is not reproducible bit for bit (BACKUP records dates); the contents are.