xref: /original-bsd/old/sh/stak.h (revision 6b7db209)
1 /*	stak.h	4.1	82/05/07	*/
2 
3 #
4 /*
5  *	UNIX shell
6  *
7  *	S. R. Bourne
8  *	Bell Telephone Laboratories
9  *
10  */
11 
12 /* To use stack as temporary workspace across
13  * possible storage allocation (eg name lookup)
14  * a) get ptr from `relstak'
15  * b) can now use `pushstak'
16  * c) then reset with `setstak'
17  * d) `absstak' gives real address if needed
18  */
19 #define		relstak()	(staktop-stakbot)
20 #define		absstak(x)	(stakbot+Rcheat(x))
21 #define		setstak(x)	(staktop=absstak(x))
22 #define		pushstak(c)	(*staktop++=(c))
23 #define		zerostak()	(*staktop=0)
24 
25 /* Used to address an item left on the top of
26  * the stack (very temporary)
27  */
28 #define		curstak()	(staktop)
29 
30 /* `usestak' before `pushstak' then `fixstak'
31  * These routines are safe against heap
32  * being allocated.
33  */
34 #define		usestak()	{locstak();}
35 
36 /* for local use only since it hands
37  * out a real address for the stack top
38  */
39 STKPTR		locstak();
40 
41 /* Will allocate the item being used and return its
42  * address (safe now).
43  */
44 #define		fixstak()	endstak(staktop)
45 
46 /* For use after `locstak' to hand back
47  * new stack top and then allocate item
48  */
49 STKPTR		endstak();
50 
51 /* Copy a string onto the stack and
52  * allocate the space.
53  */
54 STKPTR		cpystak();
55 
56 /* Allocate given ammount of stack space */
57 STKPTR		getstak();
58 
59 /* A chain of ptrs of stack blocks that
60  * have become covered by heap allocation.
61  * `tdystak' will return them to the heap.
62  */
63 BLKPTR		stakbsy;
64 
65 /* Base of the entire stack */
66 STKPTR		stakbas;
67 
68 /* Top of entire stack */
69 STKPTR		brkend;
70 
71 /* Base of current item */
72 STKPTR		stakbot;
73 
74 /* Top of current item */
75 STKPTR		staktop;
76 
77 /* Used with tdystak */
78 STKPTR		savstak();
79