BSD 4 release
[unix-history] / usr / src / cmd / px / h00vars.h
CommitLineData
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
36long argc;
37char **argv;
38
39/*
40 * Pascal runtime errors transfer to the routine
41 * 'error' in the file perror.c to decode them.
42 */
43int 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 */
55char *file; /* ptr to active file name */
56long 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 */
113struct 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 */
131long stcnt; /* number of statements executed */
132long stlim; /* max number of statements to execute */
133long llimit; /* max number of lines per text file */
134short nodump; /* 1 => no post mortum dump */
135short 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 */
143char *pxpbuf; /* pointer to pxp buffer */
144long pxpsize; /* size of pxp buffer */
145
146#ifdef profile
147/*
148 * Px execution profile data
149 */
150#define numops 256
151struct 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;
159long profcnts[numops];
31cef89c 160#define proffile "/usr/grad/mckusick/px/profile/pcnt.out"
484cb0ef
CH
161FILE *datafile; /* input datafiles */
162#else
163int profcnts; /* dummy just to keep the linker happy */
164#endif