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