xref: /csrg-svn/usr.bin/pascal/src/pc.h (revision 4880)
1738Speter /* Copyright (c) 1979 Regents of the University of California */
2738Speter 
3*4880Speter /* static	char sccsid[] = "@(#)pc.h 1.4 11/13/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.
53*4880Speter      *	    LABELFORMAT		for label names, a preceding dollar-sign.
54738Speter      *	    PREFIXFORMAT	used to print made up names with prefixes.
55738Speter      *	    LABELPREFIX		with getlab() makes up label names.
56738Speter      *	    LLABELPREFIX	with getlab() makes up sdb labels.
573428Speter      *	    FORMALPREFIX	prefix for EXTFORMAT for formal entry points.
58738Speter      *	a typical use might be to print out a name with a preceeding underscore
59738Speter      *	with putprintf( EXTFORMAT , 0 , name );
60738Speter      */
61738Speter #define	NAMEFORMAT	"%s"
62738Speter #define	EXTFORMAT	"_%s"
63*4880Speter #define	LABELFORMAT	"$%s"
64738Speter #define	PREFIXFORMAT	"%s%d"
65738Speter #define	LABELPREFIX	"L"
66738Speter #define	LLABELPREFIX	"LL"
673428Speter #define	FORMALPREFIX	"__"
68738Speter 
69738Speter     /*
70738Speter      *	the name of the statement counter
71738Speter      */
72738Speter #define	STMTCOUNT	"__stcnt"
73738Speter 
74738Speter     /*
75738Speter      *	the name of the pcp counters
76738Speter      */
77738Speter #define	PCPCOUNT	"__pcpcount"
78738Speter 
79738Speter     /*
80738Speter      *	a vector of pointer to enclosing functions for fully qualified names.
81738Speter      */
82738Speter char	*enclosing[ DSPLYSZ ];
83738Speter 
84738Speter     /*
85738Speter      *	and of course ...
86738Speter      */
87738Speter #define	BITSPERBYTE	8
88738Speter 
89738Speter     /*
90738Speter      *	error number for case label not found (ECASE)
91738Speter      *	stolen from ~mckusick/px/lib/h01errs.h
92738Speter      */
93738Speter #define	ECASE		5
94