xref: /csrg-svn/usr.bin/pascal/src/pc.h (revision 3428)
1738Speter /* Copyright (c) 1979 Regents of the University of California */
2738Speter 
3*3428Speter /* static	char sccsid[] = "@(#)pc.h 1.3 04/01/81"; */
4738Speter 
5738Speter     /*
6738Speter      *		random constants for pc
7738Speter      */
8738Speter 
9738Speter     /*
10738Speter      *	the name of the display.
11738Speter      */
12738Speter #define	DISPLAYNAME	"__disply"
13738Speter 
14738Speter     /*
15738Speter      *	the structure below describes the locals used by the run time system.
16738Speter      *	at function entry, at least this much space is allocated,
17738Speter      *	and the following information is filled in:
18738Speter      *	the address of a routine to close the current frame for unwinding,
19738Speter      *	a pointer to the display entry for the current static level and
20738Speter      *	the previous contents of the display for this static level.
21738Speter      *	the curfile location is used to point to the currently active file,
22738Speter      *	and is filled in as io is initiated.
23738Speter      *	one of these structures is allocated on the (negatively growing) stack.
24738Speter      *	at function entry, fp is set to point to the last field of the struct,
25738Speter      *	thus the offsets of the fields are as indicated below.
26738Speter      */
27738Speter struct rtlocals {
28738Speter     struct iorec	*curfile;
29738Speter     struct dispsave	dsave;
30738Speter     struct dispsave	*dptr;
31738Speter     int			(*unwind)();
32738Speter } rtlocs;
33738Speter #define	CURFILEOFFSET	( ( -sizeof rtlocs ) + sizeof rtlocs.unwind )
34738Speter #define	DSAVEOFFSET	( CURFILEOFFSET + sizeof rtlocs.curfile )
35738Speter #define	DPTROFFSET	( DSAVEOFFSET + sizeof rtlocs.dsave )
36738Speter #define	UNWINDOFFSET	( DPTROFFSET + sizeof rtlocs.dptr )
37738Speter #define	UNWINDNAME	"_UNWIND"
38738Speter 
39738Speter     /*
40738Speter      *	the register save mask for saving no registers
41738Speter      */
42738Speter #define	RSAVEMASK	( 0 )
43738Speter 
44738Speter     /*
45738Speter      *	runtime check mask for divide check and integer overflow
46738Speter      */
47738Speter #define	RUNCHECK	( ( 1 << 15 ) | ( 1 << 14 ) )
48738Speter 
49738Speter     /*
50738Speter      *	formats for various names
51738Speter      *	    NAMEFORMAT		arbitrary length strings.
52738Speter      *	    EXTFORMAT		for externals, a preceding underscore.
53738Speter      *	    PREFIXFORMAT	used to print made up names with prefixes.
54738Speter      *	    LABELPREFIX		with getlab() makes up label names.
55738Speter      *	    LLABELPREFIX	with getlab() makes up sdb labels.
56*3428Speter      *	    FORMALPREFIX	prefix for EXTFORMAT for formal entry points.
57738Speter      *	a typical use might be to print out a name with a preceeding underscore
58738Speter      *	with putprintf( EXTFORMAT , 0 , name );
59738Speter      */
60738Speter #define	NAMEFORMAT	"%s"
61738Speter #define	EXTFORMAT	"_%s"
62738Speter #define	PREFIXFORMAT	"%s%d"
63738Speter #define	LABELPREFIX	"L"
64738Speter #define	LLABELPREFIX	"LL"
65*3428Speter #define	FORMALPREFIX	"__"
66738Speter 
67738Speter     /*
68738Speter      *	the name of the statement counter
69738Speter      */
70738Speter #define	STMTCOUNT	"__stcnt"
71738Speter 
72738Speter     /*
73738Speter      *	the name of the pcp counters
74738Speter      */
75738Speter #define	PCPCOUNT	"__pcpcount"
76738Speter 
77738Speter     /*
78738Speter      *	a vector of pointer to enclosing functions for fully qualified names.
79738Speter      */
80738Speter char	*enclosing[ DSPLYSZ ];
81738Speter 
82738Speter     /*
83738Speter      *	and of course ...
84738Speter      */
85738Speter #define	BITSPERBYTE	8
86738Speter 
87738Speter     /*
88738Speter      *	error number for case label not found (ECASE)
89738Speter      *	stolen from ~mckusick/px/lib/h01errs.h
90738Speter      */
91738Speter #define	ECASE		5
92