BSD 2 development
[unix-history] / .ref-BSD-1 / px / 0x.h
CommitLineData
82e84c76
BJ
1/*
2 * px - UNIX Pascal interpreter
3 *
4 * Version 1.0, July 1977
5 *
6 * Written by Bill Joy and Chuck Haley
7 * November-December 1976
8 *
9 * Based on an earlier version by Ken Thompson
10 *
11 * Px is described in detail in the "PX 1.0 Implementation Notes"
12 * The source code for px is in several major pieces:
13 *
14 * int.c C main program which reads in interpreter code
15 * 00int.s Driver including main interpreter loop
16 * dd*.s Where dd are digits, interpreter instructions
17 * grouped by their positions in the interpreter table.
18 * p*.c Various C language routines supporting the system.
19 *
20 * In addition there are several headers defining mappings for error
21 * messages names into codes, and a definition of the interpreter transfer
22 * table. These are made by the script Emake in this directory and the scripts
23 * in the directory '../opcodes'.
24 */
25
26int argc;
27char **argv;
28
29/*
30 * Pascal runtime errors cause emulator traps
31 * to the routine onemt which transfers to the
32 * routine 'error' in the file perror.c to decode them.
33 * This method saves at least one word per static error.
34 */
35int onemt();
36
37/*
38 * Definitions for memory allocation
39 * Memory allocation routines are in 'palloc.c'
40 */
41char *bottmem, *memptr, *high, *maxstk;
42
43/*
44 * The file i/o routines maintain a notion of a "current file".
45 * The printing name of this file is kept in the variable
46 * "file" for use in error messages.
47 */
48char *file;
49\f
50/*
51 * THE RUNTIME DISPLAY
52 *
53 * The entries in the display point to the active static block marks.
54 * The first entry in the display is for the global variables,
55 * then the procedure or function at level one, etc.
56 * Each display entry points to a stack frame as shown:
57 *
58 * base of stack frame
59 * ---------------
60 * | |
61 * | block mark |
62 * | |
63 * --------------- <-- display entry points here
64 * | |
65 * | local |
66 * | variables |
67 * | |
68 * ---------------
69 * | |
70 * | expression |
71 * | temporary |
72 * | storage |
73 * | |
74 * - - - - - - - -
75 *
76 * The information in the block mark is thus at positive offsets from
77 * the display pointer entries while the local variables are at negative
78 * offsets. The block mark actually consists of two parts. The first
79 * part is created at CALL and the second at entry, i.e. BEGIN. Thus:
80 *
81 * -------------------------
82 * | |
83 * | Saved lino |
84 * | Saved lc |
85 * | Saved dp |
86 * | |
87 * -------------------------
88 * | |
89 * | Saved (dp) |
90 * | |
91 * | Current section name |
92 * | and entry line ptr |
93 * | |
94 * | Saved file name and |
95 * | file buffer ptr |
96 * | |
97 * | Empty tos value |
98 * | |
99 * -------------------------
100 */
101int display[20], *dp;
102\f
103int lino;
104int nodump;
105
106/*
107 * Random number generator constants
108 */
109long seed;
110double randa;
111double randc;
112double randm;
113double randim;
114
115/*
116 * Structures to access things on the stack
117 */
118struct {
119 char pchar;
120};
121struct {
122 int pint;
123 int p2int;
124};
125struct {
126 long plong;
127};
128struct {
129 double pdouble;
130};
131
132char discard;