1 
2 typedef int Boolean;
3 
4 typedef unsigned char univ;
5 typedef unsigned short int Uint16;
6 typedef unsigned char Uint8;
7 typedef int Sint32;
8 typedef void *hdlno;
9 typedef Sint32 fontno;
10 typedef short int Sint16;
11 
12 struct save_restore_link {
13   struct hdl *next;  /* next modified handle */
14   struct hdl *prev;  /* previous modified handle */
15 };
16 
17 /*
18 ** The first five entries entries must match "bakhdl" below.
19 */
20 typedef struct hdl {
21     univ *raw;		/* composite object value */
22     Uint16 dim;		/* # items in composite object (formerly "cnt") */
23     char cat;		/* object category (a.k.a. type) + non-gc status bits */
24     char acc_lev;	/* object attributes, save level modified or created */
25     struct save_restore_link svlink;
26     Uint8 coded_depth;	/*   0 ==> at some depth > 253;
27 			     1 ==> not on stack;
28 			     2 ==> at dictstak[0];
29 			     3 ==> at dictstak[1];
30 			   255 ==> at dictstack[253]
31 			   (see macros below)
32 			*/
33     char stat_rootlev;	/* status bits + object creation savelevel */
34     Uint8 handlev;      /* VM level of this handle; used to maintain freelist */
35     Uint8 fastlev;	/* coded save level for faster OBsave() logic:
36 			 *   0 ==> (acc_lev == 0x10)  PreScript,    ROM
37 			 *   1 ==> (acc_lev == 0x00)  savelevel  0, RAM
38 			 *   2 ==> (acc_lev == 0x01)  savelevel  1
39 			 *  16 ==> (acc_lev == 0x0F)  savelevel 15 (last)
40 			 *  17 ==>		      global level 1
41 			 */
42     union {
43       /*
44       ** In a string, array, or packedarray subinterval handle,
45       ** "superset" points to the parent string handle.
46       **/
47       struct hdl *superset;  /* see above */
48       struct hdl *gclink;    /* next composite to be scanned */
49       struct hdl *nextfree;  /* next handle on freelist */
50     } u;
51 } HDL;
52 
53 #define INI_HDLCNT	742
54 
55 struct hdl localhand[INI_HDLCNT];
56 
57 #define QUADINIT(tp,at) \
58     ((((unsigned long)(at)<<8)&0x0000ff00) | \
59      ((unsigned long)(tp)&0x000000ff))
60 
61 #define 	COMPOSGROUP		0x10
62 #define		CT_PAKARRY	0x0D
63 #define		PAKARRYTYPE		(COMPOSGROUP| CT_PAKARRY)
64 
65 #define 	EXECATTR	01
66 #define 	READONLY	04
67 
68 #define LCL_i(hnum) ((unsigned long)&localhand[hnum])
69 #define JOBXHDL 117
70 
71 struct compositeOB {
72 	unsigned long   type_attr_pos;    /* force .ALIGN 4 */
73 	unsigned long   hdl;
74 };
75 
76 static const struct compositeOB
77   do_jobx_i = {QUADINIT (PAKARRYTYPE, EXECATTR | READONLY), LCL_i(JOBXHDL)};
78 
79 #define 	OPERGROUP		0x20
80 #define		ABORTTYPE		(OPERGROUP | 0x0C)
81 #define		MACHCALLTYPE	(OPERGROUP | 0x0D)
82 
83 #define STOP_CALL	1	/* --stop-- operator */
84 
85 
86 struct filerep {
87     Sint16 des;
88     Sint16 assoc;
89 } ;
90 
91 struct stoprep {
92     Uint16 userjob;	/* True if in user job at "stopped" operator */
93     Uint16 saverr;	/* If true, any error is saved for machcall return */
94 } ;
95 
96 struct dhdr1rep {
97     Uint16 entmax;	/* Maximum entry count    */
98     Uint16 entcnt;	/* Current entry count */
99 } ;
100 
101 struct dhdr2rep {
102     Uint16 sorted;	/* Total sorted entries   */
103     Uint16 sortable;	/* Total sortable entries */
104 } ;
105 
106 typedef struct ob {
107     Uint8 type;
108     Uint8 attr;
109     Uint16 pos;
110     union {
111 	Sint32        boolrepr;
112 	Sint32        intrepr;
113 	float         realrepr;
114 	hdlno         hdl;
115 	struct stoprep stoprepr;
116 	struct filerep filrepr;
117 	struct tok   *namrepr;
118 	const struct par *oprrepr;
119 	fontno        fontrepr;
120 	Sint16        savrepr;
121 	void          (*machcallhandler)(int, int);
122 	void          (*aborthandler)(int);
123 	void         *voidprepr;
124 	struct dhdr1rep dhdr1repr;
125 	struct dhdr2rep dhdr2repr;
126     } un;
127 } OB;
128 
129 /* get type field from object */
130 #define OBtype(obp) ((obp)->type)
131 
132 /* get hdl entry from object */
133 #define OBhdl(obp) ((obp)->un.hdl)
134 
135 /* get pos field from object */
136 #define OBpos(obp) ((obp)->pos)
137 
138 OB *execptr;
139 
140 /*
141 * Clean the execution stack back to the outermost user job level
142 * or until the stack is completely empty.
143 */
clean_exec_stack(Boolean early_end)144 int clean_exec_stack (Boolean early_end)
145 {
146     OB  *pobr;
147     hdlno jobhdl;
148 
149     jobhdl  = OBhdl((OB *)&do_jobx_i);
150 
151     pobr = execptr - 1;
152 
153     if (OBhdl(pobr) == jobhdl)
154 	{
155 	    return 1;
156 
157 	}
158 
159     return (0);
160 
161 }
162 
main()163 int main()
164 {
165 }
166