|
|
1.1 root 1: .ds M \fH
2: .de Ds
3: .nf
4: .in +.5i
5: .ft H
6: .sp .5
7: ..
8: .de De
9: .ft R
10: .in -.5i
11: .fi
12: .sp .5
13: ..
14: .TH ICON_PI 1 "The University of Arizona \- 5/6/86"
15: .SH NAME
16: icon_pi \- construct personalized interpreter for Icon
17: .SH SYNOPSIS
18: \*Micon_pi\fR
19: .SH DESCRIPTION
20: A personalized interpreter is
21: a version of Icon in which the run-time system can be easily
22: augmented and modified by the user.
23: .PP
24: To set up a personalized interpreter, a new directory should
25: be created solely for the use of the interpreter; otherwise
26: files may be accidentally destroyed by the set-up process.
27: For the purpose of example, suppose this directory is
28: named \*Mmyicon\fR. The set-up process consists of
29: .Ds
30: mkdir myicon
31: cd myicon
32: icon_pi
33: .De
34: Note that \*Micon_pi\fR must be run in the area in which the personalized
35: interpreter is to be built.
36: .PP
37: The shell script \*Micon_pi\fR constructs three subdirectories:
38: \*Mh\fR, \*Mstd\fR, and \*Mpi\fR. The subdirectory \*Mh\fR
39: contains header files that are needed in C routines. The subdirectory
40: \*Mstd\fR contains the portions of the Icon system that are needed
41: to build a personalized interpreter. The subdirectory \*Mpi\fR
42: contains a \*MMakefile\fR for building a personalized interpreter
43: and also is the place where source code for new C functions normally
44: resides.
45: .PP
46: The \*MMakefile\fR that is constructed by \*Micon_pi\fR
47: contains two definitions to facilitate building personalized
48: interpreters:
49: .IP \*MOBJS\fR .5i
50: a list of object modules that are to be added to or replaced
51: in the run-time system. \*MOBJS\fR initially is empty.
52: .IP \*MLIB\fR
53: a list of library options that are used when the run-time system
54: is built. \*MLIB\fR initially is empty.
55: .PP
56: Performing a \fImake\fR in \*Mmyicon/pi\fR creates four additional files
57: in \*Mmyicon\fR:
58: .Ds
59: .ta 1i
60: picont \fRcommand processor\*M
61: pilink \fRlinker\*M
62: piconx \fRrun-time system\*M
63: piconx.hdr \fRheader for linker output\*M
64: .De
65: A link to \*Mpicont\fR also is constructed in \*Mmyicon/pi\fR so that
66: the new personalized interpreter can be tested in the directory in
67: which it is made.
68: .PP
69: The file \*Mpicont\fR normally is built only on the first \fImake\fR. The
70: file \*Mpilink\fR is built on the first \fImake\fR and is
71: rebuilt whenever the repertoire of built-in functions is changed.
72: The file \*Mpiconx\fR is rebuilt whenever the source code in the
73: run-time system is changed.
74: .PP
75: The user of the personalized interpreter uses \*Mpicont\fR in
76: the same fashion that the standard \*Micont\fR; see \fIicont(1)\fR.
77: (Note that the accidental use of \*Micont\fR in place of
78: \*Mpicont\fR may produce mysterious results.)
79: In turn, \*Mpicont\fR translates a source program using the
80: standard Icon translator and links it using \*Mpilink\fR.
81: The resulting icode file uses \*Mpiconx\fR.
82: Note that the location of \*Mpiconx\fR is built into the icode file.
83: .PP
84: The relocation bits and symbol tables in
85: \*Mpiconx\fR can be removed by
86: .Ds
87: make Stripx
88: .De
89: in \*Mmyicon/pi\fR. This reduces the size of this file substantially
90: but makes the use of debuggers impractical.
91: .PP
92: If a \fImake\fR is performed in \*Mmyicon/pi\fR before any
93: run-time files are added or modified, the resulting personalized
94: interpreter is identical to the standard one. Such a \fImake\fR can
95: be performed to verify that the personalized interpreter system
96: is performing properly.
97: .PP
98: Note that a personalized interpreter inherits the parameters and
99: configuration of the locally installed version of Icon in \*Mv6\fR, including
100: optional language extensions.
101: The file \*Mmyicon/h/config.h\fR contains configuration information.
102: The definitions in this file should not be changed.
103: .PP
104: To add a new function to the personalized interpreter, it is first
105: necessary to provide the C code, adhering to the conventions and
106: data structures used throughout Icon.
107: Some useful functions are
108: contained in \*Mv6/pi/pil\fR, where \*Mv6\fR is the root
109: of the source hierarchy for the Icon system.
110: The directory
111: \*Mv6/src/iconx\fR contains the source code for the standard built-in
112: functions, which also can be used as models for new ones.
113: .PP
114: Suppose that \*Mgetenv\fR from \*Mv6/pi/pil\fR is to be
115: added to a personalized interpreter. The source code can be obtained by
116: .Ds
117: cp v6/pi/pil/getenv.c myicon/pi
118: .De
119: (Note that the actual paths depend on the
120: local hierarchy.)
121: .PP
122: Four things now need to be done to
123: incorporate this function in the personalized interpreter:
124: .IP 1. 5n
125: Add a line consisting of
126: .Ds
127: FncDef(getenv)
128: .De
129: to \*Mmyicon/h/fdef.h\fR in proper alphabetical order.
130: This causes the linker and the run-time system to know about the new function.
131: .IP 2.
132: Add \*Mgetenv.o\fR to the definition of \*MOBJS\fR in
133: \*Mmyicon/pi/Makefile\fR.
134: This causes \*Mgetenv.c\fR to be compiled and the resulting
135: object file to be loaded with the run-time system when a \fImake\fR is performed.
136: .IP 3.
137: Add a dependency line in \*Mmyicon/pi/Makefile\fR for \*Mgetenv.o\fR
138: to reflect the file that it includes, namely
139: .Ds
140: getenv.o: ../h/rt.h
141: .De
142: .IP 4.
143: Perform a \fImake\fR in \*Mmyicon/pi\fR.
144: This produces
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.
174: The file \*Mmyicon/h/rt.h\fR contains declarations and definitions that
175: are used throughout the run-time system. This is where the declaration
176: for the structure of a new type of data object would be placed.
177: .PP
178: Care
179: must be taken when modifying header files not to make changes that
180: would produce inconsistencies between previously compiled components
181: of the Icon run-time system and new ones.
182: .SH FILES
183: .ta 1i
184: .nf
185: \*Mv6/pi\fR code for building personalized interpreters
186: \*Mv6/src/iconx\fR run-time system
187: .fi
188: .SH SEE ALSO
189: icont(1)
190: .LP
191: \fIPersonalized Interpreters for Version 6.0 of Icon\fR, Ralph E.
192: Griswold, TR 86-12, Department of Computer Science, The University
193: of Arizona, May 1986.
194: .LP
195: \fIThe Icon Programming Language\fR,
196: Ralph E. Griswold and Madge T. Griswold,
197: Prentice-Hall Inc.,
198: Englewood Cliffs, New Jersey,
199: 1983.
200: .LP
201: \fIVersion 6.0 of Icon\fR, Ralph E. Griswold, William H. Mitchell, and
202: Janalee O'Bagy,
203: TR 86-10,
204: Department of Computer Science, The University of Arizona,
205: May 1986.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.