|
|
1.1 ! root 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: */ ! 37: STKPTR 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: */ ! 47: STKPTR endstak(); ! 48: ! 49: /* Copy a string onto the stack and ! 50: * allocate the space. ! 51: */ ! 52: STKPTR cpystak(); ! 53: ! 54: /* Allocate given ammount of stack space */ ! 55: STKPTR 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: */ ! 61: BLKPTR stakbsy; ! 62: ! 63: /* Base of the entire stack */ ! 64: STKPTR stakbas; ! 65: ! 66: /* Top of entire stack */ ! 67: STKPTR brkend; ! 68: ! 69: /* Base of current item */ ! 70: STKPTR stakbot; ! 71: ! 72: /* Top of current item */ ! 73: STKPTR staktop; ! 74: ! 75: /* Used with tdystak */ ! 76: STKPTR savstak();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.