Annotation of 43BSD/contrib/icon/docs/icon-pi.1, revision 1.1.1.1

1.1       root        1: .ds M \fB
                      2: .if t .if !\nd .ds M \fM
                      3: .de Ds
                      4: .nf
                      5: .sp
                      6: .in +.5i
                      7: \\*M\c
                      8: ..
                      9: .de De
                     10: .sp
                     11: .in
                     12: .ft R
                     13: .fi
                     14: ..
                     15: .if t .if !\nd .ds M \fM
                     16: .TH ICON\-PI 1 "The University of Arizona \- 8/21/84"
                     17: .SH NAME
                     18: icon\-pi \- construct personalized interpreter for Icon
                     19: .SH SYNOPSIS
                     20: \f3icon\-pi\fR
                     21: .SH DESCRIPTION
                     22: A personalized interpreter is
                     23: a version of Icon in which the run-time system can be easily
                     24: augmented and modified by the user.
                     25: .PP
                     26: To set up a personalized interpreter, a new directory should
                     27: be created solely for the use of the interpreter; otherwise
                     28: files may be accidentally destroyed by the set-up process.
                     29: For the purpose of example, suppose this directory is
                     30: named \*Mmyicon\fR. The set-up process consists of
                     31: .Ds
                     32: mkdir myicon
                     33: cd myicon
                     34: icon\-pi
                     35: .De
                     36: Note that \*Micon\-pi\fR must be run in the area in which the personalized
                     37: interpreter is to be built.
                     38: .PP
                     39: The shell script \*Micon\-pi\fR constructs three subdirectories:
                     40: \*Mh\fR, \*Mstd\fR, and \*Mpi\fR. The subdirectory \*Mh\fR
                     41: contains header files that are needed in C routines. The subdirectory
                     42: \*Mstd\fR contains the portions of the Icon system that are needed
                     43: to build a personalized interpreter. The subdirectory \*Mpi\fR
                     44: contains a \*MMakefile\fR for building a personalized interpreter
                     45: and also is the place where source code for new C functions normally
                     46: resides.
                     47: .PP
                     48: The \*MMakefile\fR that is constructed by \*Micon\-pi\fR
                     49: contains two definitions to facilitate building personalized
                     50: interpreters:
                     51: .IP \*MOBJS\fR .5i
                     52: a list of object modules that are to be added to or replaced
                     53: in the run-time system. \*MOBJS\fR initially is empty.
                     54: .IP \*MLIB\fR
                     55: a list of library options that are used when the run-time system
                     56: is built. \*MLIB\fR initially is empty.
                     57: .PP
                     58: Performing a \fImake\fR in \*Mmyicon/pi\fR creates three files
                     59: in \*Mmyicon\fR:
                     60: .Ds
                     61: .ta 1i
                     62: picont \fRcommand processor\*M
                     63: pilink \fRlinker\*M
                     64: piconx \fRrun-time system\*M
                     65: .De
                     66: A link to \*Mpicont\fR also is constructed in \*Mmyicon/pi\fR so that
                     67: the new personalized interpreter can be tested in the directory in
                     68: which it is made.
                     69: .PP
                     70: The file \*Mpicont\fR normally is built only on the first \fImake\fR. The
                     71: file \*Mpilink\fR is built on the first \fImake\fR and is
                     72: rebuilt whenever the repertoire of built-in functions is changed.
                     73: The file \*Mpiconx\fR is rebuilt whenever the source code in the
                     74: run-time system is changed.
                     75: .PP
                     76: The user of the personalized interpreter uses \*Mpicont\fR in
                     77: the same fashion that the standard \*Micont\fR (see \fIicont(1)\fR).
                     78: (Note that the accidental use of \*Micont\fR in place of
                     79: \*Mpicont\fR may produce mysterious results.)
                     80: In turn, \*Mpicont\fR translates a source program using the
                     81: standard Icon translator and links it using \*Mpilink\fR.
                     82: The resulting icode file uses \*Mpiconx\fR.
                     83: Note that the location of \*Mpiconx\fR is built into the icode file.
                     84: .PP
                     85: The relocation bits and symbol tables in \*Mpicont\fR, \*Mpilink\fR,
                     86: and \*Mpiconx\fR can be removed by
                     87: .Ds
                     88: make Strip
                     89: .De
                     90: in \*Mmyicon/pi\fR. This reduces the sizes of these files substantially
                     91: but makes the use of debuggers impractical.
                     92: .PP
                     93: If a \fImake\fR is performed in \*Mmyicon/pi\fR before any
                     94: run-time files are added or modified, the resulting personalized
                     95: interpreter is identical to the standard one. Such a \fImake\fR can
                     96: be performed to verify that the personalized interpreter system
                     97: is performing properly.
                     98: .PP
                     99: Note that a personalized interpreter inherits the parameters and
                    100: configuration of the locally installed version of Icon in \*Mv5g\fR, including
                    101: optional language extensions.
                    102: The file \*Mmyicon/h/config.h\fR contains configuration information.
                    103: The definitions in this file should not be changed.
                    104: .PP
                    105: To add a new function to the personalized interpreter, it is first
                    106: necessary to provide the C code, adhering to the conventions and
                    107: data structures used throughout Icon.
                    108: Some useful functions from the Icon program library are
                    109: contained in \*Mv5g/pifuncs\fR, where \*Mv5g\fR is the root
                    110: of the source hierarchy for the Icon system.
                    111: The directory
                    112: \*Mv5g/functions\fR contains the source code for the standard built-in
                    113: functions, which also can be used as models for new ones.
                    114: .PP
                    115: Suppose that \*Mgetenv\fR from the Icon program library is to be
                    116: added to a personalized interpreter. The source code can be obtained by
                    117: .Ds
                    118: cp v5g/pifuncs/getenv.c myicon/pi
                    119: .De
                    120: (Note that the actual paths will be different, depending on the
                    121: local hierarchy.)
                    122: .PP
                    123: Four things now need to be done to
                    124: incorporate this function in the personalized interpreter:
                    125: .IP 1. 5n
                    126: Add a line consisting of
                    127: .Ds
                    128: PDEF(getenv)
                    129: .De
                    130: to \*Mmyicon/h/pdef.h\fR in proper alphabetical order.
                    131: This causes the linker and the run-time system to know about the new function.
                    132: .IP 2.
                    133: Add \*Mgetenv.o\fR to the definition of \*MOBJS\fR in
                    134: \*Mmyicon/pi/Makefile\fR.
                    135: This causes \*Mgetenv.c\fR to be compiled and the resulting
                    136: object file to be loaded with the run-time system when a \fImake\fR is performed.
                    137: .IP 3.
                    138: Add a dependency line in \*Mmyicon/pi/Makefile\fR for \*Mgetenv.o\fR
                    139: to reflect the file that it includes, namely
                    140: .Ds
                    141: getenv.o:   ../h/rt/h
                    142: .De
                    143: .IP 4.
                    144: Perform a \fImake\fR in \*Mmyicon/pi\fR. The result is
                    145: new versions of \*Mpilink\fR and \*Mpiconx\fR in \*Mmyicon\fR.
                    146: .LP
                    147: The function \*Mgetenv\fR now can be used like any other built-in
                    148: function.
                    149: .PP
                    150: More than one function can be included in a single source file.
                    151: If a function requires a library to be loaded, that library should
                    152: be added to the definition of \*MLIB\fR in the \*MMakefile\fR.
                    153: .PP
                    154: The use of personalized interpreters is not limited to the addition
                    155: of new functions. Any module in the standard run-time system can
                    156: be modified as well.
                    157: To modify an existing portion of the Icon run-time system,
                    158: copy the source code file from the standard system to \*Mmyicon/pi\fR.
                    159: (Source code for a few run-time routines is placed in \*Mmyicon/std\fR
                    160: when a personalized interpreter is set up. Check this directory
                    161: first and use that file, if appropriate, rather than making
                    162: another copy in \*Mmyicon/pi\fR.) When a source-code file in
                    163: \*Mmyicon/pi\fR has been modified, place it in the \*MOBJS\fR
                    164: list just like a new file and perform a \fImake\fR. Note that
                    165: an entire module must be replaced, even if a change is made to
                    166: only one routine.
                    167: Any module that is replaced must contain all the global variables in
                    168: the original module to prevent \fIld(1)\fR from also loading the
                    169: original module. There is no way to delete routines from the run-time
                    170: system.
                    171: .PP
                    172: The directory \*Mmyicon/h\fR contains header files that are included
                    173: in various source-code files. For example, error message text for
                    174: a new run-time error can be provided by adding it to \*Mmyicon/h/err.h\fR.
                    175: The file \*Mmyicon/h/rt.h\fR contains declarations and definitions that
                    176: are used throughout the run-time system. This is where the declaration
                    177: for the structure of a new type of data object would be placed.
                    178: .PP
                    179: Care
                    180: must be taken when modifying header files not to make changes that
                    181: would produce inconsistencies between previously compiled components
                    182: of the Icon run-time system and new ones.
                    183: .SH FILES
                    184: .ta \w'\*Mv5g/operators\fR   'u
                    185: .nf
                    186: \*Mv5g/pilib\fR        code for building personalized interpreters
                    187: \*Mv5g/pifuncs\fR      functions from the Icon program library
                    188: \*Mv5g/functions\fR    built-in functions
                    189: \*Mv5g/operators\fR    built-in operators
                    190: \*Mv5g/rt\fR   run-time support routines
                    191: \*Mv5g/lib\fR  routines called by the interpreter
                    192: \*Mv5g/iconx\fR        the interpreter and start-up routines
                    193: .fi
                    194: .SH SEE ALSO
                    195: .I
                    196: The Icon Programming Language\fR,
                    197: Ralph E. Griswold and Madge T. Griswold,
                    198: Prentice-Hall Inc.,
                    199: Englewood Cliffs, New Jersey,
                    200: 1983.
                    201: .LP
                    202: \fIVersion 5.9 of Icon\fR, Ralph E. Griswold, Robert K. McConeghy, and William H. Mitchell,
                    203: Department of Computer Science, The University of Arizona,
                    204: August 1984.
                    205: .LP
                    206: \fIInstallation and Maintenance Guide for Version 5.9 of Icon\fR,
                    207: Ralph E. Griswold and William H. Mitchell,
                    208: Department of Computer Science, The University of Arizona,
                    209: August 1984.
                    210: .LP
                    211: \fIA Tour Through the C Implementation of Icon; Version 5.9\fR,
                    212: Ralph E. Griswold, Robert K. McConeghy, and William H. Mitchell,
                    213: Department of Computer Science,
                    214: The University of Arizona, August 1984.
                    215: .LP
                    216: \fIThe Icon Program Library\fR, Ralph E. Griswold,
                    217: Department of Computer Science, The University of
                    218: Arizona, August 1984.
                    219: .LP
                    220: icont(1)

unix.superglobalmegacorp.com

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