Commit | Line | Data |
---|---|---|
31cef89c BJ |
1 | /* Copyright (c) 1979 Regents of the University of California */ |
2 | ||
3 | /* static char sccsid[] = "@(#)h00vars.h 4.1 10/10/80"; */ | |
4 | ||
484cb0ef CH |
5 | /* |
6 | * px - Berkeley Pascal interpreter | |
7 | * | |
8 | * Version 2.0, January 1979 | |
9 | * | |
10 | * Original version by Ken Thompson | |
11 | * | |
12 | * Substantial revisions by Bill Joy and Chuck Haley | |
13 | * November-December 1976 | |
14 | * | |
15 | * Rewritten for VAX 11/780 by Kirk McKusick | |
16 | * Fall 1978 | |
17 | * | |
18 | * Px is described in detail in the "PX 1.0 Implementation Notes" | |
19 | * The source code for px is in several major pieces: | |
20 | * | |
21 | * int.c C main program which reads in interpreter code | |
22 | * 00case.s Driver including main interpreter loop | |
23 | * dd*.s Where dd are digits, interpreter instructions | |
24 | * grouped by their positions in the interpreter table. | |
25 | * p*.c Various C language routines supporting the system. | |
26 | * | |
27 | * In addition there are several headers defining mappings for error | |
28 | * messages names into codes, and a definition of the interpreter transfer | |
29 | * table. These are made by the script Emake in this directory and the scripts | |
30 | * in the directory '../opcodes'. | |
31 | */ | |
31cef89c BJ |
32 | #define TRUE 1 |
33 | #define FALSE 0 | |
34 | #define BITSPERLONG 32 | |
484cb0ef CH |
35 | |
36 | long argc; | |
37 | char **argv; | |
38 | ||
39 | /* | |
40 | * Pascal runtime errors transfer to the routine | |
41 | * 'error' in the file perror.c to decode them. | |
42 | */ | |
43 | int perrno; /* number of error which occurred */ | |
44 | ||
45 | /* | |
46 | * Definitions for memory allocation | |
47 | * Memory allocation is done by palloc in utilities.c | |
48 | */ | |
49 | ||
50 | /* | |
51 | * The file i/o routines maintain a notion of a "current file". | |
52 | * The printing name of this file is kept in the variable | |
53 | * "file" for use in error messages. | |
54 | */ | |
55 | char *file; /* ptr to active file name */ | |
56 | long fchain; /* head of active file chain */ | |
31cef89c | 57 | \f |
484cb0ef CH |
58 | /* |
59 | * THE RUNTIME DISPLAY | |
60 | * | |
61 | * The entries in the display point to the active static block marks. | |
62 | * The first entry in the display is for the global variables, | |
63 | * then the procedure or function at level one, etc. | |
64 | * Each display entry points to a stack frame as shown: | |
65 | * | |
66 | * base of stack frame | |
67 | * --------------- | |
68 | * | | | |
69 | * | block mark | | |
70 | * | | | |
71 | * --------------- <-- display entry points here | |
72 | * | | | |
73 | * | local | | |
74 | * | variables | | |
75 | * | | | |
76 | * --------------- | |
77 | * | | | |
78 | * | expression | | |
79 | * | temporary | | |
80 | * | storage | | |
81 | * | | | |
82 | * - - - - - - - - | |
83 | * | |
84 | * The information in the block mark is thus at positive offsets from | |
85 | * the display pointer entries while the local variables are at negative | |
86 | * offsets. The block mark actually consists of two parts. The first | |
87 | * part is created at CALL and the second at entry, i.e. BEGIN. Thus: | |
88 | * | |
89 | * ------------------------- | |
90 | * | | | |
91 | * | Saved lino | | |
92 | * | Saved lc | | |
93 | * | Saved dp | | |
94 | * | | | |
95 | * ------------------------- | |
96 | * | | | |
97 | * | Saved (dp) | | |
98 | * | | | |
99 | * | Current section name | | |
100 | * | and entry line ptr | | |
101 | * | | | |
102 | * | Saved file name and | | |
103 | * | file buffer ptr | | |
104 | * | | | |
105 | * | Empty tos value | | |
106 | * | | | |
107 | * ------------------------- | |
108 | */ | |
109 | \f | |
110 | /* | |
111 | * Structure for accessing things in the block mark | |
112 | */ | |
113 | struct stack { | |
114 | long *tos; /* pointer to top of stack frame */ | |
115 | char *file; /* pointer to active file name */ | |
116 | long buf; /* pointer to active file record */ | |
117 | struct { | |
31cef89c | 118 | long nargs; /* number of bytes of arguments */ |
484cb0ef | 119 | short offset; /* offset of procedure in source file */ |
31cef89c | 120 | char name[1];/* name of active procedure */ |
484cb0ef CH |
121 | } *entry; |
122 | struct stack *disp; /* previous display value for this level */ | |
123 | struct stack **dp; /* pointer to active display entry */ | |
124 | long lc; /* previous location counter */ | |
125 | long lino; /* previous line number */ | |
31cef89c BJ |
126 | } *display[20]; |
127 | \f | |
484cb0ef CH |
128 | /* |
129 | * Program option variables | |
130 | */ | |
131 | long stcnt; /* number of statements executed */ | |
132 | long stlim; /* max number of statements to execute */ | |
133 | long llimit; /* max number of lines per text file */ | |
134 | short nodump; /* 1 => no post mortum dump */ | |
135 | short mode; /* mode of input to interpreter */ | |
136 | #define PX 0 /* normal run of px */ | |
137 | #define PIX 1 /* load and go */ | |
138 | #define PIPE 2 /* bootstrap via a pipe */ | |
139 | \f | |
140 | /* | |
141 | * Pxp variables | |
142 | */ | |
143 | char *pxpbuf; /* pointer to pxp buffer */ | |
144 | long pxpsize; /* size of pxp buffer */ | |
145 | ||
146 | #ifdef profile | |
147 | /* | |
148 | * Px execution profile data | |
149 | */ | |
150 | #define numops 256 | |
151 | struct cntrec { | |
152 | double counts[numops]; /* instruction counts */ | |
153 | long runs; /* number of interpreter runs */ | |
154 | long startdate; /* date profile started */ | |
155 | long usrtime; /* total user time consumed */ | |
156 | long systime; /* total system time consumed */ | |
157 | double stmts; /* number of pascal statements executed */ | |
158 | } profdata; | |
159 | long profcnts[numops]; | |
31cef89c | 160 | #define proffile "/usr/grad/mckusick/px/profile/pcnt.out" |
484cb0ef CH |
161 | FILE *datafile; /* input datafiles */ |
162 | #else | |
163 | int profcnts; /* dummy just to keep the linker happy */ | |
164 | #endif |