Annotation of researchv10dc/cmd/icon/docs/tr86-11.roff, revision 1.1

1.1     ! root        1: .so tmac.tr
        !             2: .ds M \fC
        !             3: .de Ta
        !             4: .ta .8i +.8i +.8i +.8i +.8i +.8i +.8i
        !             5: ..
        !             6: .de Px
        !             7: .ta 3.5i
        !             8: ..
        !             9: .ds CF \s10- \\n(PN - \s0
        !            10: .de Ap
        !            11: .bp
        !            12: .ce 10
        !            13: \f3\\$1\f1
        !            14: .ce 0
        !            15: .sp 2
        !            16: .if !''\\$2' 'so \\$2
        !            17: ..
        !            18: .TR 86-11b
        !            19: .DA "June 30, 1986"
        !            20: .Gi
        !            21: .TL
        !            22: Installation Guide for Version 6.0 of Icon on UNIX Systems
        !            23: .AU
        !            24: Ralph E. Griswold
        !            25: .AE
        !            26: .tr *\(**
        !            27: .NH
        !            28: Introduction
        !            29: .PP
        !            30: If you are installing Version 6.0 of Icon on a computer with a version
        !            31: of \*U
        !            32: for which configuration information already
        !            33: .Un
        !            34: has been developed \(em a ``supported system'' \(em the installation may be as simple as
        !            35: issuing a few \*Mmake\fR commands.
        !            36: The presently supported systems are Amdahl 580 (UTS), the AT&T 3B series,
        !            37: the HP 9000 (HP-UX), personal computers running PC/IX and XENIX,
        !            38: the PDP-11 (Version 7 UNIX), the Pyramid 90x,
        !            39: the Ridge 32, the Sun Workstation, and the VAX-11 (Berkeley and System V UNIX).
        !            40: .PP
        !            41: If you are installing Version 6.0 on a supported system, start with the next section.
        !            42: Otherwise, skip to Section 7.
        !            43: .PP
        !            44: If you are installing Version 6.0 on a system that is running an earlier
        !            45: version of Icon, be sure to read Section 6 concerning possible impacts
        !            46: of Version 6.0 on present users.
        !            47: .NH
        !            48: Standard Installation
        !            49: .PP
        !            50: The standard installation uses configuration information that is
        !            51: included with the distribution. This configuration information
        !            52: should be correct for most sites. If you want to check it out
        !            53: before proceeding, read Section 7.
        !            54: .PP
        !            55: For the standard installation, all files, including executable binaries,
        !            56: are placed
        !            57: in the directory \*M/usr/icon/v6\fR\s-2\u\(dg\d\s0. If you want executable binary files
        !            58: .FS
        !            59: .sp .5
        !            60: \s-2\u\(dg\d\s0\^For HP-UX, the standard location is \*M/users/icon/v6\fR.
        !            61: .FE
        !            62: in some other location,
        !            63: you must edit a file before proceeding. Think twice about this.
        !            64: Icon executable binary files are referenced by full path names; they
        !            65: cannot be moved, so it is important to select the correct paths at the start.
        !            66: See Appendix A if you want to change the location of binary files.
        !            67: .PP
        !            68: The Icon distribution is rooted in \*Mv6\fR.
        !            69: Unload the distribution files
        !            70: into the installation directory (the standard installation directory
        !            71: is \*M/usr/icon\fR).
        !            72: See Appendix B, if necessary, for information on unloading
        !            73: the distribution files.
        !            74: See Appendix C for a listing of the distribution hierarchy.
        !            75: .PP
        !            76: In the description that follows, paths are relative to \*Mv6\fR.
        !            77: For example, \*MMakefile\fR refers to the \*MMakefile\fR in the
        !            78: top level of the distribution hierarchy.
        !            79: .PP
        !            80: There are four phases of the installation: setup, compilation,
        !            81: installation,
        !            82: and testing.
        !            83: All are done using \*MMakefile\fR in \*Mv6\fR.
        !            84: .PP
        !            85: Setup is based on the name of the system being installed,
        !            86: as shown in the right column of the following
        !            87: table:
        !            88: .DS
        !            89: .ft R
        !            90: .ta 2i 3.7i
        !            91: .sp .5
        !            92: \fIcomputer    UNIX system     name\fR
        !            93: .sp .5
        !            94: Amdahl 580     UTS     \*Mamdahl_uts\fR
        !            95: AT&T 3B2/5/15  System V        \*Matt3b5\fR
        !            96: AT&T 3B20      System V        \*Matt3b20\fR
        !            97: HP 9000        HP-UX   \*Mhp9000\fR
        !            98: IBM PC/XT/AT   PC/IX   \*Mpc_pcix\fR
        !            99: IBM AT XENIX   \*Mpc_xenix_smm\fR
        !           100: PDP-11 (separate I & D spaces) Version 7       \*Mpdp11_v7\fR
        !           101: Pyramid 90x    Berkeley 4.2bsd \*Mpyramid_bsd\fR
        !           102: Ridge 32       ROS     \*Mridge\fR
        !           103: Sun Workstation        UNIX 4.2        \*Msun\fR
        !           104: VAX-11 Berkeley 4.1bsd \*Mvax_4.1bsd\fR
        !           105: VAX-11 Berkeley 4.2bsd & 4.3bsd        \*Mvax_bsd\fR
        !           106: VAX-11 System V        \*Mvax_sysv\fR
        !           107: .DE
        !           108: Before proceeding, check the status of the system you plan to install.
        !           109: In \*Mv6\fR
        !           110: .Ds
        !           111: make Status name=\fIname\fR
        !           112: .De
        !           113: where \fIname\fR is one of those given above. For example,
        !           114: .Ds
        !           115: make Status name=sun
        !           116: .De
        !           117: lists the status of Version 6.0 on the Sun Workstation.
        !           118: .PP
        !           119: There are some supported systems for which not all features of Version
        !           120: 6.0 are implemented. If this is the case for your system,
        !           121: proceed with the installation, but you may wish to implement the
        !           122: missing features later. For this, see Section 7.
        !           123: .PP
        !           124: Start the installation with
        !           125: .Ds
        !           126: make Setup name=\fIname\fR
        !           127: .De
        !           128: where \fIname\fR is the name of your system as described above.
        !           129: For example,
        !           130: .Ds
        !           131: make Setup name=vax_bsd
        !           132: .De
        !           133: configures Version 6.0 of Icon for a VAX running Berkeley 4.\fIn\fRbsd.
        !           134: .PP
        !           135: Compilation and installation are done by
        !           136: .Ds
        !           137: make Icon Install
        !           138: .De
        !           139: This takes a while. There may be warning messages on some systems,
        !           140: but there should be no fatal errors.
        !           141: .PP
        !           142: For a standard installation, a few simple tests are sufficient to
        !           143: check that Icon is running properly. The following does the job:
        !           144: .Ds
        !           145: make Test-icon
        !           146: .De
        !           147: This test compares local program output with the expected output.
        !           148: There should be no differences.
        !           149: .PP
        !           150: If all is well, you may wish to copy the manual page \*Micont.1\fR in
        !           151: \*Mv6/docs\fR to your local public manual area.
        !           152: That's all there is to a standard installation.
        !           153: .NH
        !           154: Personalized Interpreters
        !           155: .PP
        !           156: Version 6.0 contains a ``personalized interpreter'' facility
        !           157: [1] that allows an individual to modify and
        !           158: extend a private copy of Icon's run-time system. To install this optional
        !           159: component of Icon,
        !           160: .Ds
        !           161: make PI
        !           162: .De
        !           163: For testing, do
        !           164: .Ds
        !           165: make Test-pi
        !           166: .De
        !           167: Expect some differences in this test, since one function checks local
        !           168: environment variables.
        !           169: .PP
        !           170: You may want to copy
        !           171: the shell script \*Micon_pi\fR, which makes personalized interpreters,
        !           172: from \*Mv6\fR to a public area for general use. You also may want to copy
        !           173: the manual page
        !           174: \*Micon_pi.1\fR in \*Mv6/docs\fR to the public manual area.
        !           175: .NH
        !           176: Icon Program Library
        !           177: .PP
        !           178: The Icon program library [2] contains a variety of programs
        !           179: and procedures. To install this optional component of the Version 6.0
        !           180: distribution,
        !           181: .Ds
        !           182: make Ipl
        !           183: .De
        !           184: This puts compiled programs in \*Mv6/ipl/progs\fR and translated
        !           185: procedures in \*Mv6/ipl/procs\fR. To test the library,
        !           186: .Ds
        !           187: make Test-ipl
        !           188: .De
        !           189: You can copy
        !           190: the programs in \*Mv6/ipl/progs\fR and the translated procedures
        !           191: in \*Mv6/ipl/procs\fR to other locations if you want.
        !           192: .NH
        !           193: Cleaning Up
        !           194: .PP
        !           195: After Icon and any optional components have be installed, you
        !           196: can remove non-source files and test results by
        !           197: .Ds
        !           198: make Clean
        !           199: .De
        !           200: You also can remove source files, but think twice about this,
        !           201: since source files may be useful to persons using personalized
        !           202: interpreters.
        !           203: .NH
        !           204: User Impacts
        !           205: .PP
        !           206: The language features of Version 6.0 are very similar to those of
        !           207: preceding Versions 5.9 and 5.10. Therefore, most user programs
        !           208: that run properly under versions 5.9 and 5.10 should run properly
        !           209: under Version 6.0.
        !           210: However, users should be encouraged to read the Version 6.0 description
        !           211: [3].
        !           212: There are two possible sources of operational problems: version checking
        !           213: and link path specifications.
        !           214: .PP
        !           215: Prior to  Version 6.0, there was no check that ucode files produced by the
        !           216: Icon translator and executable icode files produced by the Icon linker 
        !           217: were compatible with the Icon run-time system.
        !           218: Incompatible files simply caused mysterious program malfunction.
        !           219: Version 6.0 produces
        !           220: version-numbered files and checks compatibility. An attempt
        !           221: to use a file produced by an earlier version results in a error
        !           222: message from Version 6.0 (\*Mucode file has no version identification\fR).
        !           223: .PP
        !           224: Since executable files contain the full path name of the run-time
        !           225: system (\*Miconx\fR), proper installation should avoid problems with
        !           226: version numbers in icode files.
        !           227: Ucode files, which are typically used in libraries included by
        !           228: the \*Mlink\fR declaration, are more troublesome.
        !           229: Incompatible versions may be confusing,
        !           230: since the source of the
        !           231: problem may be hidden.
        !           232: Users should be advised to re-translate all ucode files when Version 6.0
        !           233: is installed.
        !           234: Similarly, if an earlier version of the Icon program library is in
        !           235: use, it should be replaced by the Version 6.0 library, built under
        !           236: Version 6.0 as described in Section 4. (Some earlier Icon program
        !           237: library material has been deleted in Version 6.0; if such material is
        !           238: in use, it can be added to the Version 6.0 library.)
        !           239: .PP
        !           240: The syntax of the \*MIPATH\fR environment variable, which is used
        !           241: by the linker to search for files given in \*Mlink\fR declarations,
        !           242: has changed in Version 6.0. Previously the separator was a colon;
        !           243: in Version 6.0 it is a blank. Problems with \*MIPATH\fR usually
        !           244: are indicated by the linker error message \*MCan't resolve referernce to file
        !           245: \&\*(El \fR.
        !           246: .NH
        !           247: Configuring Version 6.0 for a New System
        !           248: .PP
        !           249: Version 6.0 of Icon makes two assumptions about sizes:
        !           250: .RS
        !           251: .IP 1. 4n
        !           252: C \fIint\fRs are either 16 or 32 bits long.
        !           253: .IP 2.
        !           254: The sizes of C \fIint\fRs and C pointers are the same.
        !           255: .RE
        !           256: .LP
        !           257: If your system violates either of these assumptions, don't try to
        !           258: go on \(em but check back with us, since we are working on
        !           259: removing these restrictions.
        !           260: .PP
        !           261: To install Icon on a system that is not supported in the
        !           262: distribution, you must create a directory to hold files
        !           263: containing configuration information. In the description
        !           264: that follows, this directory is referred to as your
        !           265: configuration directory.
        !           266: .PP
        !           267: First you need to select a name for your system.
        !           268: The name should consist of a mnemonic for the computer, which may be followed
        !           269: by an underscore and a mnemonic for the operating system,
        !           270: in case there may be more than one operating system for the
        !           271: computer.
        !           272: Examples are \*Mvax_bsd\fR and \*Mvax_sysv\fR.
        !           273: You may want to append an additional
        !           274: underscore and a qualification if there is more than more likely
        !           275: implementation for a given computer and operating system. An
        !           276: example is \*Mpc_xenix_smm\fR for the small memory model
        !           277: implementation of Icon on XENIX.
        !           278: .PP
        !           279: To build and initialize a new configuration directory,
        !           280: .Ds
        !           281: make System name=\fIname\fR
        !           282: .De
        !           283: where \fIname\fR is the name of your system.
        !           284: .PP
        !           285: Now
        !           286: .Ds
        !           287: cd v6/setup/\fIname\fR
        !           288: .De
        !           289: where you need to edit some files. The files that may need editing are
        !           290: .Ds
        !           291: .ta 1.2i
        !           292: paths.h        \fRpaths for executable binary files\*M
        !           293: header.hdr     \fRsizing for a bootstrap header file\*M
        !           294: icont.hdr      \fRflags for command processor \*MMakefile
        !           295: iconx.hdr      \fRflags and other definitions for the run-time system \*MMakefile
        !           296: link.hdr       \fRflags for the linker \*MMakefile
        !           297: tran.hdr       \fRflags for the translator \*MMakefile
        !           298: pi.hdr \fRflags for the personalized interpreter \*MMakefile
        !           299: config.trl     \fRother configuration definitions\*M
        !           300: rswitch.c      \fRco-expression context switch\*M
        !           301: rover.c        \fRarithmetic overflow checks\*M
        !           302: Ranlib \fRlibrary randomizer for personalized interpreters\*M
        !           303: .De
        !           304: .NH 2
        !           305: \*Mpaths.h\fR
        !           306: .PP
        !           307: If \*M/usr/icon/v6\fR is acceptable as a location for all Icon
        !           308: files, you don't have to change \*Mpaths.h\fR.
        !           309: Otherwise, handle the file \*Mpaths.h\fR as described in Appendix A.
        !           310: .NH 2
        !           311: \*Mheader.hdr\fR
        !           312: .PP
        !           313: The file \*Mheader.hdr\fR contains a definition for \*MMaxHdr\fR,
        !           314: which determines the amount of space that is reserved for \*Miconx.hdr\fR,
        !           315: the bootstrapping program that gets Icon programs into execution.
        !           316: You cannot determine the most appropriate value of \*MMaxHdr\fR until
        !           317: after Icon has been compiled.
        !           318: An overly large value just wastes file space in compiled Icon programs,
        !           319: but a value that is not large enough prevents compiled Icon
        !           320: programs from executing.
        !           321: .PP
        !           322: The value provided, 4096, is more than enough for most systems
        !           323: and you can wait to change it until later. Remember, however,
        !           324: that if Icon programs fail to execute, this value may be
        !           325: too small.
        !           326: .PP
        !           327: After all else has been done and Icon has been compiled and
        !           328: tested, come back to this file and change the value of \*MMaxHdr\fR
        !           329: to the size of \*Mv6/src/icont/iconx.hdr\fR. You may need to
        !           330: round the size up on some systems.
        !           331: In any event, make \*MMaxHdr\fR a hundred or so larger than the
        !           332: size of \*Miconx.hdr\fR to allow for a somewhat larger size
        !           333: that may be needed for personalized interpreters.
        !           334: .PP
        !           335: On some systems, particularly UNIX emulators, many routines may be
        !           336: included by the loader regardless of need. In this case, the size
        !           337: of \*Miconx.hdr\fR may be impractically large. If this is the case
        !           338: on your system, the header file can be eliminated altogether by
        !           339: adding
        !           340: .Ds
        !           341: #define NoHeader
        !           342: .De
        !           343: to \*Mconfig.trl\fR (see Section 7.4). The effect of this definition
        !           344: is to render Icon programs non-executable. Instead, they must be
        !           345: run by using the \*M\-x\fR option after the program name when
        !           346: \*Micont\fR is used, as in
        !           347: .Ds
        !           348: icont prog.icn -x
        !           349: .De
        !           350: Such a program also can be run as an argument of \*Miconx\fR, as in
        !           351: .Ds
        !           352: iconx prog
        !           353: .De
        !           354: where \*Mprog\fR is the result of translating and linking \*Mprog.icn\fR
        !           355: as in the previous example.
        !           356: .PP
        !           357: If \*MNoHeader\fR is defined, the value of \*MMaxHdr\fR is irrelevant.
        !           358: .NH 2
        !           359: \*MMakefile\fR headers
        !           360: .PP
        !           361: The files \*Micont.hdr\fR, \*Miconx.hdr\fR, \*Mlink.hdr\fR, and \*Mtran.hdr\fR
        !           362: provide headers for \*MMakefile\fRs in \*Mv6/src/icont\fR, \*Mv6/src/iconx\fR,
        !           363: and so on. These headers are prepended to the standard bodies for the
        !           364: \*MMakefile\fRs during setup.
        !           365: .PP
        !           366: Except for \*Miconx.hdr\fR, these headers serve only to specify flags for
        !           367: \fIcc(1)\fR and \fIld(1)\fR via \*MCFLAGS\fR and \*MLDFLAGS\fR.
        !           368: If your C optimizer is robust, you may wish to start with
        !           369: .Ds
        !           370: CFLAGS= -O
        !           371: .De
        !           372: in all these headers. In fact, if you are installing Icon on a computer
        !           373: with a small address space, this flag (as well as others) may be necessary
        !           374: to obtain modules small enough to load. However, if you encounter
        !           375: problems during testing, suspect your optimizer first and try compiling
        !           376: Version 6.0 without the \*M\-O\fR flag.
        !           377: .PP
        !           378: Other \fIcc\fR and \fIld\fR flags vary considerably from system to system.
        !           379: You may want to review your local manual pages for these processors and
        !           380: look at the header files in the other configuration areas.
        !           381: .PP
        !           382: There are two other definitions in \*Miconx.hdr\fR: \*MRSWITCH\fR and
        !           383: \*MROVER\fR, which depend on whether the local co-expression
        !           384: context switch and arithmetic overflow checks are written in
        !           385: C or assembly language. The initial values of these definitions
        !           386: are \*Mrswitch.c\fR and \*Mrover.c\fR, and dummy C routines
        !           387: are provided. To start out, leave these definitions as they are;
        !           388: the default routines can be replaced later. See Sections 7.7 and 7.8.
        !           389: .PP
        !           390: The file \*Mpi.hdr\fR provides a header for the personalized interpreter
        !           391: \*MMakefile\fR, which is in \*Mv6/Pimakefile\fR. In addition to the usual
        !           392: \fIcc\fR and \fIld\fR flags, you should provide definitions for
        !           393: \*MXCFLAGS\fR and \*MXLDFLAGS\fR that are the same as those for
        !           394: \*MCFLAGS\fR and \*MLDFLAGS\fR in \*Micont.hdr\fR. This assures that
        !           395: the header file in the personalized interpreter is the same size as
        !           396: the one in the regular version of Icon.
        !           397: .NH 2
        !           398: \*Mconfig.trl\fR
        !           399: .PP
        !           400: The remaining configuration information is contained in \*Mconfig.trl\fR.
        !           401: The definitions in this file as provided by \*MSetup\fR are for
        !           402: a ``vanilla'' 32-bit computer. Changes may be needed as follows:
        !           403: .SH
        !           404: \*MFork\fR
        !           405: .PP
        !           406: If your system supports \fIvfork(2)\fR, change the definition of
        !           407: \*MFork\fR from \*Mfork\fR to \*Mvfork\fR.
        !           408: .SH
        !           409: \*MHostStr\fR
        !           410: .PP
        !           411: Change the definition of \*MHostStr\fR, which provides the value
        !           412: of the Icon keyword \*M&host\fR, to some string that adequately
        !           413: identifies your installation. If you want to use a local system
        !           414: routine to provide the host name automatically, read Appendix D.
        !           415: .SH
        !           416: \*MHz\fR
        !           417: .PP
        !           418: If you are running in a 50-hz environment, change the
        !           419: definition of \*MHz\fR from \*M60\fR to \*M50\fR.
        !           420: .SH
        !           421: \*MIntSize\fR, \*MLongSize\fR, and \*MPtrSize\fR
        !           422: .PP
        !           423: Define these constants to the the sizes, in bits, of you C \*Mint\fRs,
        !           424: \*Mlong\fRs and pointers, respectively.
        !           425: These values normally are 16 or 32.
        !           426: \*MNoOver\fR
        !           427: .PP
        !           428: Initially, \*Mconfig.trl\fR contains
        !           429: .Ds
        !           430: #define NoOver
        !           431: .De
        !           432: This definition disables arithmetic overflow checks, which must be
        !           433: written in assembly language. Leave this definition in for the
        !           434: first round, although you may want to remove it later (see Section 7.8).
        !           435: .SH
        !           436: \*MSysTime\fR
        !           437: .PP
        !           438: The system \*Minclude\fR file \*Mtime.h\fR is in different locations on
        !           439: different systems \(em either \*M<time.h>\fR or \*M<sys/time.h>\fR.
        !           440: Define \*MSysTime\fR accordingly.
        !           441: .PP
        !           442: If you give the incorrect location,
        !           443: a fatal error will occur during the compilation of \*Mv6/src/iconx/lmisc.c\fR.
        !           444: The use of this definition also depends on your C preprocessor
        !           445: making macro substitutions in \*M#include\fR directives. Most preprocessors
        !           446: do, but if yours does not, edit \*M/v6/src/iconx/lmisc.c\fR and
        !           447: replace \*MSysTime\fR there by the appropriate value. If you have to
        !           448: do this, make a note to come back later and place the definition under
        !           449: the control of conditional compilation as described in Section 7.5.
        !           450: .SH
        !           451: Names of Indexing Routines
        !           452: .PP
        !           453: Different versions of UNIX use different names for the routines for
        !           454: locating substrings within strings. Version 6.0 of Icon uses
        !           455: \*Mindex\fR and \*Mrindex\fR. The other possibilities are \*Mstrchr\fR
        !           456: and \*Mstrrchr\fR. If your system uses the latter names, add
        !           457: .Ds
        !           458: #define index strchr
        !           459: #define rindex strrchr
        !           460: .De
        !           461: to \*Mconfig.trl\fR.
        !           462: .SH
        !           463: Other Definitions
        !           464: .PP
        !           465: There are several other configuration details that are needed for
        !           466: a few systems. Most of these can be handled by optionally defined
        !           467: symbols.
        !           468: .PP
        !           469: If your system needs a specific check for division by floating-point
        !           470: zero, as opposed to relying on a signal, add
        !           471: .Ds
        !           472: #define ZeroDivide
        !           473: .De
        !           474: to your \*Mconfig.trl\fR file.
        !           475: .PP
        !           476: If your system requires C \fIdouble\fRs to be aligned at double-word
        !           477: boundaries, add
        !           478: .Ds
        !           479: #define Double
        !           480: .De
        !           481: to your \*Mconfig.trl\fR file.
        !           482: .PP
        !           483: Most computers have down-growing C stacks, for which stack addresses
        !           484: decrease as values are pushed. If you have an up-growing stack, for
        !           485: which stack addresses increase as values are pushed, add
        !           486: .Ds
        !           487: #define UpStack
        !           488: .De
        !           489: to your \*Mconfig.trl\fR file.
        !           490: .PP
        !           491: Icon includes its own versions of \*Mmalloc\fR and \*Mfree\fR, so that
        !           492: it can manage its storage region without interference from allocation
        !           493: by the operating system. Normally, Icon's \*Mmalloc\fR and \*Mfree\fR
        !           494: are loaded instead of the system library routines. If your system
        !           495: insists on loading its own library routines, multiple definitions will
        !           496: occur as a result of the \fIld\fR in \*M/v6/src/iconx\fR.
        !           497: .PP
        !           498: If multiple definitions occur in \*Miconx\fR, go back and add
        !           499: .Ds
        !           500: #define IconAlloc
        !           501: .De
        !           502: to \*Mconfig.trl\fR. This definition
        !           503: causes Icon's routines to be named differently to avoid collision
        !           504: with the system routine names.
        !           505: .PP
        !           506: One possible effect of this definition is to interfere with Icon's
        !           507: expansion of its memory region in case the initial values for allocated
        !           508: storage are not large enough to accommodate a program that produces a
        !           509: lot of data.
        !           510: This problem appears in the form of run-time error 304 or 305 and can
        !           511: be circumvented on a case-by-case basis by increasing the
        !           512: initial values for allocated storage by setting environment variables [4].
        !           513: .NH 2
        !           514: Modifications to the Distributed Source Code
        !           515: .PP
        !           516: The configuration system is designed to avoid modifications to
        !           517: the distributed source code for Version 6.0.  However, on some
        !           518: systems, it may be necessary to modify the source code.
        !           519: .PP
        !           520: If you need to modify the source code, do it under the control of
        !           521: conditional compilation keyed to the name of your system. Add
        !           522: .Ds
        !           523: #define \fINAME\fR
        !           524: .De
        !           525: where \fINAME\fR is an all-uppercase name that identifies your system.
        !           526: For example, the \*Mconfig.trl\fR for Sun Workstations contains
        !           527: .Ds
        !           528: #define SUN
        !           529: .De
        !           530: .LP
        !           531: Then use
        !           532: .Ds
        !           533: #ifdef \fINAME\*M
        !           534: .do
        !           535: #endif \fINAME\*M
        !           536: .De
        !           537: or similar constructions where you need local source-code modifications.
        !           538: For example, this technique can be used to handle the problem that
        !           539: may arise with \*MSysTime\fR, described in Section 7.4. Note
        !           540: that nested \*M#ifdef\fRs may be needed in places where there are several
        !           541: different local modifications.
        !           542: .PP
        !           543: It is important to be consistent and careful about the use of such
        !           544: conditional compilations; if done properly, your modifications can be
        !           545: backed into the central version of the source code at the University
        !           546: of Arizona and will be in place for you when subsequent
        !           547: versions are released.
        !           548: See Section 8.
        !           549: .NH 2
        !           550: Initial Installation of a New System
        !           551: .PP
        !           552: Once you have edited the configuration files as described in the
        !           553: previous sections, proceed with setup, compilation, and installation
        !           554: as described in Section 2. You may need to iterate.
        !           555: If you make a change in a configuration file after a compilation, be
        !           556: sure to perform the setup again; some aspects of the setup are
        !           557: far-reaching and not obvious.
        !           558: .PP
        !           559: More testing is recommended for a new installation than for one
        !           560: that has been successfully installed elsewhere.
        !           561: As a start, do
        !           562: .Ds
        !           563: make Test-icon
        !           564: .De
        !           565: If that works,
        !           566: .Ds
        !           567: make Test-large
        !           568: .De
        !           569: or
        !           570: .Ds
        !           571: make Test-small
        !           572: .De
        !           573: depending on whether you defined \*MPtrSize\fR to be 32 or 16 earlier.
        !           574: These tests are quite extensive and contain some real grinders;
        !           575: be prepared to wait a while. See \*Mv6/tests/Makefile\fR for more
        !           576: information.
        !           577: .PP
        !           578: There will be some differences between local and standard results
        !           579: in \*Mcheck\fR, since
        !           580: it contains site and time-dependent tests. Other minor discrepancies
        !           581: may occur because of differences in the handling of floating-point
        !           582: arithmetic on different systems.
        !           583: .PP
        !           584: Do \fInot\fR run any other tests until you have implemented the
        !           585: co-expression context switch (see Section 7.7) and decided what to
        !           586: do about arithmetic overflow checking (see Section 7.8).
        !           587: .NH 2
        !           588: Co-Expressions
        !           589: .PP
        !           590: All aspects of co-expression creation and activation are written
        !           591: in C in Version 6.0 except for a routine, \*Mcoswitch\fR, that is needed for
        !           592: context switching. This routine requires assembly
        !           593: language, since it must manipulate hardware registers.
        !           594: It can either be written as a C routine with \*Masm\fR directives
        !           595: or as an assembly language routine.
        !           596: .PP
        !           597: When a new configuration directory is set up, a file \*Mrswitch.c\fR is
        !           598: provided with
        !           599: a version of \*Mcoswitch\fR that results in error termination if an Icon
        !           600: program attempts to activate a co-expression.
        !           601: .PP
        !           602: Calls to the context switch have the form \*Mcoswitch(old_cs,new_cs,first)\fR,
        !           603: where \*Mold_cs\fR is a pointer to an array of words that contain C state
        !           604: information for the current co-expression, \*Mnew_cs\fR is a pointer to
        !           605: an array of words that hold C state information for a co-expression to
        !           606: be activated, and \*Mfirst\fR is 1 or 0, depending on whether or not
        !           607: the new co-expression has or has not been activated before.
        !           608: The zeroth element of a C state array always contains the stack pointer
        !           609: (\fIsp\fR) for that co-expression. The other elements (15 are provided)
        !           610: can be used to save any C frame pointers and any
        !           611: other registers your C compiler expects to be preserved across calls.
        !           612: .PP
        !           613: The first thing \*Mcoswitch\fR does is to save the current pointers
        !           614: and registers in the \*Mold_cs\fR array. Then it tests \*Mfirst\fR.
        !           615: If \*Mfirst\fR is zero, \*Mcoswitch\fR sets \fIsp\fR from
        !           616: \*Mnew_cs[0]\fR, clears the C frame pointers, and \fIcalls\fR
        !           617: \*Minterp\fR. If \*Mfirst\fR is not zero, it loads the (previously saved)
        !           618: \fIsp\fR, C frame pointers, and registers from \*Mnew_cs\fR and
        !           619: returns.
        !           620: .PP
        !           621: Written in C, \*Mcoswitch\fR has the form:
        !           622: .DS
        !           623: .ta 1i
        !           624: .ft C
        !           625: /*
        !           626:  * coswitch
        !           627:  */
        !           628: coswitch(old_cs, new_cs, first)
        !           629: int *old_cs, *new_cs;
        !           630: int first;
        !           631: {
        !           632: .do 2i
        !           633:             /* save sp, frame pointers, and other registers in old_cs */
        !           634: .do 2i
        !           635:    if (first == 0) {   /* this is first activation */
        !           636: .do 2i
        !           637:             /* load sp from new_cs[0] and clear frame pointers */
        !           638: .do 2i
        !           639:       interp(0, 0);
        !           640:       syserr("interp() returned in coswitch");
        !           641:       }
        !           642:    else {
        !           643: .do 2i
        !           644:             /* load sp, frame pointers, and other registers from new_cs */
        !           645: .do 2i
        !           646:       }
        !           647: }
        !           648: .DE
        !           649: Appendix E contains \*Mcoswitch\fR for the VAX.
        !           650: Other examples are contained in the configuration directories in
        !           651: \*Mv6/setup\fR.
        !           652: .PP
        !           653: If you do not want to implement the context switch, the only effect will
        !           654: be that Icon programs that attempt to activate a co-expression will
        !           655: terminate with an error message. If you chose to implement the context
        !           656: switch, replace \*Mrswitch.c\fR in your configuration directory
        !           657: by either a new \*Mrswitch.c\fR or an assembly language file named
        !           658: \*Mrswitch.s\fR. The setup process will copy your file to the
        !           659: appropriate place prior to compilation. If you use \*Mrswitch.s\fR,
        !           660: change the definition of \*MRSWITCH\fR in \*Miconx.hdr\fR in your
        !           661: configuration area to
        !           662: .Ds
        !           663: RSWITCH=rswitch.s
        !           664: .De
        !           665: If your assembler requires special flags, add an appropriate
        !           666: definition for \*MOFLAGS\fR to \*Miconx.hdr\fR.
        !           667: .PP
        !           668: To test your context switch,
        !           669: .Ds
        !           670: make Test-lcoexpr
        !           671: .De
        !           672: or
        !           673: .Ds
        !           674: make Test-scoexpr
        !           675: .De
        !           676: depending on whether you defined \*MPtrSize\fR to be 32 or 16 earlier.
        !           677: There should be no differences in the comparison of outputs.
        !           678: .PP
        !           679: If you have trouble with your context switch, the first thing to do
        !           680: is double-check the registers that your C compiler expects to
        !           681: be preserved across calls \(em different C compilers on the same
        !           682: computer may have different requirements.
        !           683: .PP
        !           684: Another possible source of problems is built-in stack checking.
        !           685: Co-expressions rely on being able to specify an arbitrary region
        !           686: of memory for the C stack. If your C compiler generates code for
        !           687: stack probes that expects the C stack to be at a specific location,
        !           688: you may need to disable this code or replace it with something
        !           689: more appropriate.
        !           690: .PP
        !           691: If your system does not allow the C stack to be at an arbitrary
        !           692: place in memory, there is probably little hope of implementing
        !           693: co-expressions.
        !           694: .NH 2
        !           695: Arithmetic Overflow Checks
        !           696: .PP
        !           697: C does not provide overflow checking for integer addition, subtraction,
        !           698: or multiplication. Icon, on the other hand, is supposed to check for
        !           699: overflow. This requires assembly-language code.
        !           700: .PP
        !           701: The \*Mconfig.trl\fR file provided when a new configuration area is
        !           702: set up provides the definition
        !           703: .Ds
        !           704: #define NoOver
        !           705: .De
        !           706: which causes overflow checking to be bypassed.
        !           707: .PP
        !           708: If you do not want to implement overflow checking, you need do nothing.
        !           709: If you want to implement overflow checking, remove the definition
        !           710: of \*MNoOver\fR from your \*Mconfig.trl\fR and write routines
        !           711: \*Mckadd\fR, \*Mcksub\fR, and \*Mckmul\fR that call \*Mrunerr(203,0)\fR
        !           712: in the case of overflow. Appendix F contains the overflow checking
        !           713: routine for the VAX.
        !           714: Other examples are contained in the configuration directories in
        !           715: \*Mv6/setup\fR.
        !           716: .PP
        !           717: If you supply overflow checking routines, put them in the file
        !           718: \*Mrover.s\fR in your configuration directory. The setup will copy
        !           719: this file to the appropriate place prior to compilation.
        !           720: .PP
        !           721: To test overflow checking,
        !           722: .Ds
        !           723: make Test-over
        !           724: .De
        !           725: There should be no differences in the comparison of outputs if overflow
        !           726: checking is working properly.
        !           727: .PP
        !           728: You should also rerun previous tests at this point to make sure
        !           729: that arithmetic still works properly.
        !           730: .NH 2
        !           731: Personalized Interpreters
        !           732: .PP
        !           733: The personalized interpreter system uses \fIar(1)\fR. On most
        !           734: UNIX systems, it is necessary to use \fIranlib(1)\fR so that the
        !           735: loader can access the archive. The script \*MRanlib\fR that is
        !           736: provided when a new configuration directory is initialized contains
        !           737: calls of \fIranlib\fR for this purpose.
        !           738: .PP
        !           739: Some UNIX systems, notably System V, handle this problem directly
        !           740: in \fIar(1)\fR and do not have \fIranlib(1)\fR. If your system does
        !           741: not use \fIranlib(1)\fR, change \*MRanlib\fR to an empty script by
        !           742: .Ds
        !           743: echo "" >Ranlib
        !           744: .De
        !           745: in your configuration directory.
        !           746: .
        !           747: .a
        !           748: .PP
        !           749: Test your personalized interpreter system as described in Section
        !           750: 3. If the test programs fail to execute, suspect the size of
        !           751: \*Mv6/tests/pi/piconx.hdr\fR, the personalized interpreter
        !           752: version of \*Miconx.hdr\fR. If it is larger than \*MMaxHdr\fR,
        !           753: something is wrong. Check the file \*Mpi.hdr\fR in your
        !           754: configuration directory as described in Section 7.3.
        !           755: .NH
        !           756: Trouble Reports and Feedback
        !           757: .PP
        !           758: If you run into problems, contact the Icon Project:
        !           759: .DS
        !           760: .ft R
        !           761: Icon Project
        !           762: Department of Computer Science
        !           763: The University of Arizona
        !           764: Tucson, AZ   85721
        !           765: .sp .5
        !           766: (602) 621-6613
        !           767: .sp .5
        !           768: \*Micon\[email protected]
        !           769: {ihnp4,noao,mcnc,utah-cs}!arizona!icon-project
        !           770: .DE
        !           771: .PP
        !           772: Please also let us know of any suggestions for improvements to the
        !           773: installation process and corrections or refinements to configuration
        !           774: files for supported systems.
        !           775: .PP
        !           776: If you installed a previously unsupported system,
        !           777: send a copy of the files
        !           778: in your configuration directory and any files in \*Mv6/src\fR that
        !           779: you modified to
        !           780: so that we can back them in to the central version of the source.
        !           781: .SH
        !           782: Acknowledgement
        !           783: .PP
        !           784: Gregg Townsend made a number of helpful suggestions related to the
        !           785: process for installing Version 6.0.
        !           786: .SH
        !           787: References
        !           788: .LP
        !           789: 1. Griswold, Ralph E. \fIPersonalized Interpreters for Version 6.0 of Icon\fR,
        !           790: Technical Report TR 86-12, Department of Computer Science, The University
        !           791: of Arizona. May 1986.
        !           792: .LP
        !           793: 2. Griswold, Ralph E. \fIThe Icon Program Library; Version 6.0\fR,
        !           794: Technical Report TR 86-13, Department of Computer Science, The University
        !           795: of Arizona. May 1986.
        !           796: .LP
        !           797: 3. Griswold, Ralph E., William H. Mitchell, and Janalee O'Bagy.
        !           798: \fIVersion 6.0 of Icon\fR, Technical Report TR 86-10, Department of
        !           799: Computer Science, The University of Arizona. May 1986.
        !           800: .LP
        !           801: 4. Griswold, Ralph E. \fIICONT(1)\fR, manual page for \fIUNIX
        !           802: Programmer's Manual\fR, Department of Computer Science, The
        !           803: University of Arizona. May 1986.
        !           804: .Ap "Appendix A \(em Changing the Locations of Version 6.0 Files"
        !           805: .sp
        !           806: .PP
        !           807: As mentioned in Section 2, the distributed files are rooted in \*Mv6\fR.
        !           808: The standard location for this hierarchy is \*M/usr/icon/v6\fR\s-2\u1\d\s0.
        !           809: .FS
        !           810: \s-2\u1\d\s0\^For HP-UX, the standard location is \*M/users/icon/v6\fR.
        !           811: The location \*M/usr/icon/v6\fR is used here for convenience.
        !           812: .FE
        !           813: The hierarchy can be placed somewhere else if you desire, but
        !           814: before performing the setup, you must edit a file that
        !           815: specifies where the binary files are to be installed.
        !           816: .PP
        !           817: The directory \*Mv6/setup\fR contains a subdirectory for each
        !           818: supported system. For example, \*Mv6/setup/sun\fR contains the
        !           819: configuration information for the Sun Workstation. To get to the
        !           820: configuration information for your system,
        !           821: .Ds
        !           822: cd v6/setup/\fIname\fR
        !           823: .De
        !           824: where \fIname\fR is the name of your system.
        !           825: .PP
        !           826: The file \*Mpaths.h\fR,
        !           827: as distributed, is the same for all systems and contains
        !           828: .Ds
        !           829: .ta 1.8i
        !           830: #define RootPath       "/usr/icon/v6"
        !           831: #define IcontPath      "/usr/icon/v6/bin/icont"
        !           832: #define TranPath       "/usr/icon/v6/bin/itran"
        !           833: #define LinkPath       "/usr/icon/v6/bin/ilink"
        !           834: #define IconxPath      "/usr/icon/v6/bin/iconx"
        !           835: #define HeaderPath     "/usr/icon/v6/bin/iconx.hdr"
        !           836: .De
        !           837: \*MRootPath\fR gives the location of the \*Mv6\fR hierarchy.
        !           838: .PP
        !           839: The five binary files referenced are:
        !           840: .Ds
        !           841: .ta 1i
        !           842: icont  \fRIcon command processor \(em all the typical user knows about\*M
        !           843: itran  \fRIcon translator\*M
        !           844: ilink  \fRIcon linker\*M
        !           845: iconx  \fRIcon run-time system\*M
        !           846: iconx.hdr      \fRbootstrap program that gets Icon programs into execution
        !           847: .De
        !           848: The command processor \*Micont\fR calls the other programs.
        !           849: .PP
        !           850: There are two reasons for changing these paths:
        !           851: .RS
        !           852: .IP 1. 4n
        !           853: If \*Mv6\fR is
        !           854: unloaded in an area other than \*M/usr/icon/v6\fR,
        !           855: you probably want the binary files installed in that area instead of
        !           856: \*M/usr/icon/v6\fR.
        !           857: .IP 2.
        !           858: You may want to install some or all of the binary files in a public
        !           859: area.
        !           860: .RE
        !           861: .LP
        !           862: For example, if you want to unload Icon in \*M/usr/irving/v6\fR,
        !           863: edit \*Mpaths.h\fR to be
        !           864: .Ds
        !           865: .ta 1.8i
        !           866: #define RootPath       "/usr/irving/v6"
        !           867: #define IcontPath      "/usr/irving/v6/bin/icont"
        !           868: #define TranPath       "/usr/irving/v6/bin/itran"
        !           869: #define LinkPath       "/usr/irving/v6/bin/ilink"
        !           870: #define IconxPath      "/usr/irving/v6/bin/iconx"
        !           871: #define HeaderPath     "/usr/irving/v6/bin/iconx.hdr"
        !           872: .De
        !           873: Similarly, if you want \*Micont\fR to reside in \*M/usr/local/icont\fR,
        !           874: edit the line for \*Micont\fR to be
        !           875: .Ds
        !           876: .ta 1i 2i
        !           877: #define IcontPath "/usr/local/icont"
        !           878: .De
        !           879: \fICaution:\fR If you have a previously installed version of Icon, do not
        !           880: put \*Miconx\fR at that place \(em
        !           881: \*Miconx\fR for Version 6.0 is incompatible with \*Miconx\fR for
        !           882: previous versions and replacing a previous \*Miconx\fR by Version 6.0
        !           883: \*Miconx\fR will invalidate all previously compiled Icon programs.
        !           884: .Ap "Appendix B \(em Unloading the Distribution Files"
        !           885: .sp 2
        !           886: .PP
        !           887: The Icon distribution files are distributed in a variety of ways.
        !           888: The usual distribution is magnetic tape, although
        !           889: it is available on 5-\(14\(fm\(fm diskettes in DOS and
        !           890: PC/IX formats. The directions that follow refer to magnetic tape
        !           891: distribution only.
        !           892: .PP
        !           893: The Icon system is provided on tape in \fItar\fR or \fIcpio\fR format, recorded
        !           894: at 1600 or 6250 bpi as specified when Version 6.0 is ordered.
        !           895: Tapes are written in \fItar\fR format at 1600 bpi if no specification
        !           896: is given.
        !           897: The format and recording density are marked on the label on the tape.
        !           898: .PP
        !           899: To unload the tape,
        !           900: do a \fIcd\fR to the directory that is to hold
        !           901: the Icon hierarchy (that is, the directory in which \*Mv6\fR is to be
        !           902: created) and mount the tape.
        !           903: The precise
        !           904: \fItar\fR or \fIcpio\fR command to unload the distribution
        !           905: tape depends on the local environment.
        !           906: On a VAX running 4.\fIn\fRbsd, use
        !           907: the following command for a 1600 bpi \fItar\fR distribution tape:
        !           908: .Ds
        !           909: tar x
        !           910: .De
        !           911: Similarly, on a VAX running System V with a 6250 bpi \fIcpio\fR tape,
        !           912: use:
        !           913: .Ds
        !           914: cpio -icdB </dev/rmt/0h
        !           915: .De
        !           916: .Ap "Appendix C \(em The Distribution Hierarchy"
        !           917: .sp 2
        !           918: .Ds
        !           919: .ta 1i +1i +1i +1i +1i +1i +1i +1i
        !           920: /v6            \fRroot of the Version 6.0 hierarchy\*M
        !           921:        /bin    \fRstandard location for binary files\*M
        !           922:        /book   \fRprograms from the Icon book\*M
        !           923:        /docs   \fRsource text for documents\*M
        !           924:        /ipl    \fRIcon program library\*M
        !           925:        /pi     \fRpersonalized interpreter system\*M
        !           926:        /setup  \fRsetup and configuration files\*M
        !           927:        /src    \fRsource code for the Icon system\*M
        !           928:        /tests  \fRtest programs\*M
        !           929: .De
        !           930: .Ap "Appendix D \(em Host Name"
        !           931: .sp 2
        !           932: .PP
        !           933: The default method for specifying the host name that determines the
        !           934: value of \*M&host\fR is the definition of \*MHostStr\fR in
        !           935: \*Mconfig.trl\fR in the configuration directory. There are three other
        !           936: ways of specifying the host; only one may be used.
        !           937: .SH
        !           938: \*MWhoHost\fR
        !           939: .PP
        !           940: On some versions of UNIX, notably Version 7 and 4.1bsd, the file
        !           941: \*M/usr/include/whoami.h\fR contains the host name. If your system has
        !           942: this file and you want to
        !           943: use this name,
        !           944: .Ds
        !           945: #define WhoHost
        !           946: .De
        !           947: .SH
        !           948: \*MGetHost\fR
        !           949: .PP
        !           950: Some versions of UNIX, notably 4.2bsd and 4.3bsd, provide the
        !           951: host name via the \fIgethostname(2)\fR system call. If your system supports
        !           952: this system call and you want
        !           953: to use this name,
        !           954: .Ds
        !           955: #define GetHost
        !           956: .De
        !           957: .SH
        !           958: \*MUtsName\fR
        !           959: .PP
        !           960: Some versions of UNIX, such as System V, provide the host name via
        !           961: the \fIuname(2)\fR system call. If your system supports this call
        !           962: and you want to use this name,
        !           963: .Ds
        !           964: #define UtsName
        !           965: .De
        !           966: .Ap "Appendix E \(em Sample Co-Expression Context Switch"
        !           967: .sp 2
        !           968: .SH
        !           969: \*Mrswitch.c\fR for the VAX under Berkeley UNIX:
        !           970: .LP
        !           971: .Ds
        !           972: .ta 2.5i
        !           973: coswitch(old_cs, new_cs, first)
        !           974: int *old_cs, *new_cs;
        !           975: int first;
        !           976: .Dd
        !           977: {
        !           978:    asm("  movl 4(ap),r0");
        !           979:    asm("  movl 8(ap),r1");
        !           980:    asm("  movl sp,0(r0)");
        !           981:    asm("  movl fp,4(r0)");
        !           982:    asm("  movl ap,8(r0)");
        !           983:    asm("  movl r11,16(r0)");
        !           984:    asm("  movl r10,20(r0)");
        !           985:    asm("  movl r9,24(r0)");
        !           986:    asm("  movl r8,28(r0)");
        !           987:    asm("  movl r7,32(r0)");
        !           988:    asm("  movl r6,36(r0)");
        !           989: .Dd
        !           990:    if (first == 0)     { /* this is first activation */
        !           991:       asm("  movl 0(r1),sp");
        !           992:       asm("  clrl fp");
        !           993:       asm("  clrl ap");
        !           994:       interp(0, 0);
        !           995:       syserr("interp() returned in coswitch");
        !           996:       }
        !           997: .Dd
        !           998:    else {
        !           999:       asm(" movl 0(r1),sp");
        !          1000:       asm(" movl 4(r1),fp");
        !          1001:       asm(" movl 8(r1),ap");
        !          1002:       asm(" movl 16(r1),r11");
        !          1003:       asm(" movl 20(r1),r10");
        !          1004:       asm(" movl 24(r1),r9");
        !          1005:       asm(" movl 28(r1),r8");
        !          1006:       asm(" movl 32(r1),r7");
        !          1007:       asm(" movl 36(r1),r6");
        !          1008:       }
        !          1009: }
        !          1010: .De
        !          1011: .Ap "Appendix F \(em Sample Arithmetic Overflow Checking Routine"
        !          1012: .sp 2
        !          1013: .SH
        !          1014: \*Mrover.s\fR for the VAX under Berkeley UNIX:
        !          1015: .Ds
        !          1016: .globl _ckadd
        !          1017: .globl _cksub
        !          1018: .globl _ckmul
        !          1019: 
        !          1020: .text
        !          1021: .align 1
        !          1022: _ckadd:        .word   0
        !          1023:        addl3   4(ap),8(ap),r0  # Perform addition
        !          1024:        jvs     oflow           # Branch if overflow
        !          1025:        ret                     # Return result in r0
        !          1026: 
        !          1027: .align 1
        !          1028: _cksub: .word  0
        !          1029:        subl3   8(ap),4(ap),r0  # Perform subtraction
        !          1030:        jvs     oflow           # Branch if overflow
        !          1031:        ret                     # Return result in r0
        !          1032: 
        !          1033: .align 1
        !          1034: _ckmul:        .word   0
        !          1035:        mull3   4(ap),8(ap),r0  # Perform multiplication
        !          1036:        jvs     oflow           # Branch if overflow
        !          1037:        ret                     # Return result in r0
        !          1038: 
        !          1039: oflow:                         # Got overflow on an operation
        !          1040:        pushl   $0
        !          1041:        pushl   $203
        !          1042:        calls   $1,_runerr      # runerr(203,0)
        !          1043: .De

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.