new version from Chris Torek
[unix-history] / usr / src / old / sh / stak.h
CommitLineData
5bd35864
KM
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 */
39STKPTR 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 */
49STKPTR endstak();
50
51/* Copy a string onto the stack and
52 * allocate the space.
53 */
54STKPTR cpystak();
55
56/* Allocate given ammount of stack space */
57STKPTR 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 */
63BLKPTR stakbsy;
64
65/* Base of the entire stack */
66STKPTR stakbas;
67
68/* Top of entire stack */
69STKPTR brkend;
70
71/* Base of current item */
72STKPTR stakbot;
73
74/* Top of current item */
75STKPTR staktop;
76
77/* Used with tdystak */
78STKPTR savstak();