typedef int Boolean;
typedef unsigned char univ;
typedef unsigned short int Uint16;
typedef unsigned char Uint8;
typedef int Sint32;
typedef void *hdlno;
typedef Sint32 fontno;
typedef short int Sint16;
struct save_restore_link {
struct hdl *next; /* next modified handle */
struct hdl *prev; /* previous modified handle */
};
/*
** The first five entries entries must match "bakhdl" below.
*/
typedef struct hdl {
univ *raw; /* composite object value */
Uint16 dim; /* # items in composite object (formerly "cnt") */
char cat; /* object category (a.k.a. type) + non-gc status bits */
char acc_lev; /* object attributes, save level modified or created */
struct save_restore_link svlink;
Uint8 coded_depth; /* 0 ==> at some depth > 253;
1 ==> not on stack;
2 ==> at dictstak[0];
3 ==> at dictstak[1];
255 ==> at dictstack[253]
(see macros below)
*/
char stat_rootlev; /* status bits + object creation savelevel */
Uint8 handlev; /* VM level of this handle; used to maintain freelist */
Uint8 fastlev; /* coded save level for faster OBsave() logic:
* 0 ==> (acc_lev == 0x10) PreScript, ROM
* 1 ==> (acc_lev == 0x00) savelevel 0, RAM
* 2 ==> (acc_lev == 0x01) savelevel 1
* 16 ==> (acc_lev == 0x0F) savelevel 15 (last)
* 17 ==> global level 1
*/
union {
/*
** In a string, array, or packedarray subinterval handle,
** "superset" points to the parent string handle.
**/
struct hdl *superset; /* see above */
struct hdl *gclink; /* next composite to be scanned */
struct hdl *nextfree; /* next handle on freelist */
} u;
} HDL;
#define INI_HDLCNT 742
struct hdl localhand[INI_HDLCNT];
#define QUADINIT(tp,at) \
((((unsigned long)(at)<<8)&0x0000ff00) | \
((unsigned long)(tp)&0x000000ff))
#define COMPOSGROUP 0x10
#define CT_PAKARRY 0x0D
#define PAKARRYTYPE (COMPOSGROUP| CT_PAKARRY)
#define EXECATTR 01
#define READONLY 04
#define LCL_i(hnum) ((unsigned long)&localhand[hnum])
#define JOBXHDL 117
struct compositeOB {
unsigned long type_attr_pos; /* force .ALIGN 4 */
unsigned long hdl;
};
static const struct compositeOB
do_jobx_i = {QUADINIT (PAKARRYTYPE, EXECATTR | READONLY), LCL_i(JOBXHDL)};
#define OPERGROUP 0x20
#define ABORTTYPE (OPERGROUP | 0x0C)
#define MACHCALLTYPE (OPERGROUP | 0x0D)
#define STOP_CALL 1 /* --stop-- operator */
struct filerep {
Sint16 des;
Sint16 assoc;
} ;
struct stoprep {
Uint16 userjob; /* True if in user job at "stopped" operator */
Uint16 saverr; /* If true, any error is saved for machcall return */
} ;
struct dhdr1rep {
Uint16 entmax; /* Maximum entry count */
Uint16 entcnt; /* Current entry count */
} ;
struct dhdr2rep {
Uint16 sorted; /* Total sorted entries */
Uint16 sortable; /* Total sortable entries */
} ;
typedef struct ob {
Uint8 type;
Uint8 attr;
Uint16 pos;
union {
Sint32 boolrepr;
Sint32 intrepr;
float realrepr;
hdlno hdl;
struct stoprep stoprepr;
struct filerep filrepr;
struct tok *namrepr;
const struct par *oprrepr;
fontno fontrepr;
Sint16 savrepr;
void (*machcallhandler)(int, int);
void (*aborthandler)(int);
void *voidprepr;
struct dhdr1rep dhdr1repr;
struct dhdr2rep dhdr2repr;
} un;
} OB;
/* get type field from object */
#define OBtype(obp) ((obp)->type)
/* get hdl entry from object */
#define OBhdl(obp) ((obp)->un.hdl)
/* get pos field from object */
#define OBpos(obp) ((obp)->pos)
OB *execptr;
/*
* Clean the execution stack back to the outermost user job level
* or until the stack is completely empty.
*/
int clean_exec_stack (Boolean early_end)
{
OB *pobr;
hdlno jobhdl;
jobhdl = OBhdl((OB *)&do_jobx_i);
pobr = execptr - 1;
if (OBhdl(pobr) == jobhdl)
{
return 1;
}
return (0);
}
int main()
{
}