|
|
1.1 ! root 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();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.