xref: /csrg-svn/usr.bin/pascal/src/pc.h (revision 10659)
1738Speter /* Copyright (c) 1979 Regents of the University of California */
2738Speter 
3*10659Speter /* static	char sccsid[] = "@(#)pc.h 1.7 02/01/83"; */
4738Speter 
59120Smckusick #include <setjmp.h>
69120Smckusick 
7738Speter     /*
8*10659Speter      *	random constants for pc
9738Speter      */
10738Speter 
11738Speter     /*
12738Speter      *	the name of the display.
13738Speter      */
14738Speter #define	DISPLAYNAME	"__disply"
15738Speter 
16738Speter     /*
17738Speter      *	the structure below describes the locals used by the run time system.
18738Speter      *	at function entry, at least this much space is allocated,
19738Speter      *	and the following information is filled in:
20738Speter      *	the address of a routine to close the current frame for unwinding,
21738Speter      *	a pointer to the display entry for the current static level and
22738Speter      *	the previous contents of the display for this static level.
23738Speter      *	the curfile location is used to point to the currently active file,
24738Speter      *	and is filled in as io is initiated.
25738Speter      *	one of these structures is allocated on the (negatively growing) stack.
26738Speter      *	at function entry, fp is set to point to the last field of the struct,
27738Speter      *	thus the offsets of the fields are as indicated below.
28738Speter      */
29738Speter struct rtlocals {
309120Smckusick     jmp_buf		gotoenv;
31738Speter     struct iorec	*curfile;
32738Speter     struct dispsave	dsave;
33738Speter } rtlocs;
349120Smckusick #define	GOTOENVOFFSET	( -sizeof rtlocs )
359120Smckusick #define	CURFILEOFFSET	( GOTOENVOFFSET + sizeof rtlocs.gotoenv )
36738Speter #define	DSAVEOFFSET	( CURFILEOFFSET + sizeof rtlocs.curfile )
37738Speter 
38738Speter     /*
39*10659Speter      *	this is a cookie used to communicate between the
40*10659Speter      *	routine entry code and the routine exit code.
41*10659Speter      *	mostly it's for labels shared between the two.
42738Speter      */
43*10659Speter #ifdef vax
44*10659Speter struct entry_exit_cookie {
45*10659Speter     struct nl	*nlp;
46*10659Speter     char	extname[BUFSIZ];
47*10659Speter     int		toplabel;
48*10659Speter     int		savlabel;
49*10659Speter };
50*10659Speter #define	FRAME_SIZE_LABEL	"LF"
51*10659Speter #define	SAVE_MASK_LABEL		"L"
52*10659Speter #endif vax
53738Speter 
54*10659Speter #ifdef mc68000
55*10659Speter struct entry_exit_cookie {
56*10659Speter     struct nl	*nlp;
57*10659Speter     char	extname[BUFSIZ];
58*10659Speter     int		toplabel;
59*10659Speter };
60*10659Speter #define	FRAME_SIZE_LABEL	"LF"
61*10659Speter #define	PAGE_BREAK_LABEL	"LP"
62*10659Speter #define	SAVE_MASK_LABEL		"LS"
63*10659Speter #endif mc68000
64738Speter 
65738Speter     /*
66738Speter      *	formats for various names
67738Speter      *	    NAMEFORMAT		arbitrary length strings.
68738Speter      *	    EXTFORMAT		for externals, a preceding underscore.
694880Speter      *	    LABELFORMAT		for label names, a preceding dollar-sign.
70738Speter      *	    PREFIXFORMAT	used to print made up names with prefixes.
71738Speter      *	    LABELPREFIX		with getlab() makes up label names.
72738Speter      *	    LLABELPREFIX	with getlab() makes up sdb labels.
733428Speter      *	    FORMALPREFIX	prefix for EXTFORMAT for formal entry points.
74738Speter      *	a typical use might be to print out a name with a preceeding underscore
75738Speter      *	with putprintf( EXTFORMAT , 0 , name );
76738Speter      */
77738Speter #define	NAMEFORMAT	"%s"
78738Speter #define	EXTFORMAT	"_%s"
794880Speter #define	LABELFORMAT	"$%s"
80738Speter #define	PREFIXFORMAT	"%s%d"
81738Speter #define	LABELPREFIX	"L"
82738Speter #define	LLABELPREFIX	"LL"
833428Speter #define	FORMALPREFIX	"__"
84738Speter 
85738Speter     /*
86738Speter      *	the name of the statement counter
87738Speter      */
88738Speter #define	STMTCOUNT	"__stcnt"
89738Speter 
90738Speter     /*
91738Speter      *	the name of the pcp counters
92738Speter      */
93738Speter #define	PCPCOUNT	"__pcpcount"
94738Speter 
95738Speter     /*
96738Speter      *	a vector of pointer to enclosing functions for fully qualified names.
97738Speter      */
98738Speter char	*enclosing[ DSPLYSZ ];
99738Speter 
100*10659Speter #ifdef vax
101738Speter     /*
102*10659Speter      *	the runtime framepointer and argumentpointer registers
103*10659Speter      */
104*10659Speter #   define	P2FP		13
105*10659Speter #   define	P2FPNAME	"fp"
106*10659Speter #   define	P2AP		12
107*10659Speter #   define	P2APNAME	"ap"
108*10659Speter 
109*10659Speter     /*
110*10659Speter      *	the register save mask for saving no registers
111*10659Speter      */
112*10659Speter #   define	RSAVEMASK	( 0 )
113*10659Speter 
114*10659Speter     /*
115*10659Speter      *	runtime check mask for divide check and integer overflow
116*10659Speter      */
117*10659Speter #   define	RUNCHECK	( ( 1 << 15 ) | ( 1 << 14 ) )
118*10659Speter     /*
119738Speter      *	and of course ...
120738Speter      */
121*10659Speter #   define	BITSPERBYTE	8
122*10659Speter 
123*10659Speter #endif vax
124*10659Speter 
125*10659Speter #ifdef mc68000
126*10659Speter     /*
127*10659Speter      *	this magic numbers lifted from pcc/mac2defs
128*10659Speter      */
129*10659Speter #   define	P2FP		14
130*10659Speter #   define	P2FPNAME	"a6"
131*10659Speter #   define	P2AP		14
132*10659Speter #   define	P2APNAME	"a6"
133*10659Speter 
134*10659Speter     /*
135*10659Speter      *	and still ...
136*10659Speter      */
137*10659Speter #   define	BITSPERBYTE	8
138*10659Speter #endif mc68000
139