1*35164Smarc /* 2*35164Smarc 3*35164Smarc * Copyright (c) 1984, 1985, 1986 AT&T 4*35164Smarc * All Rights Reserved 5*35164Smarc 6*35164Smarc * THIS IS UNPUBLISHED PROPRIETARY SOURCE 7*35164Smarc * CODE OF AT&T. 8*35164Smarc * The copyright notice above does not 9*35164Smarc * evidence any actual or intended 10*35164Smarc * publication of such source code. 11*35164Smarc 12*35164Smarc */ 13*35164Smarc /* @(#)stak.h 1.1 */ 14*35164Smarc 15*35164Smarc /* 16*35164Smarc * UNIX shell 17*35164Smarc * 18*35164Smarc * S. R. Bourne 19*35164Smarc * AT&T Bell Laboratories 20*35164Smarc * 21*35164Smarc */ 22*35164Smarc 23*35164Smarc /* 24*35164Smarc * To use stack as temporary workspace across 25*35164Smarc * possible storage allocation (eg name lookup) 26*35164Smarc * a) get ptr from `relstak' 27*35164Smarc * b) can now use `pushstak' 28*35164Smarc * c) then reset with `setstak' 29*35164Smarc * d) `absstak' gives real address if needed 30*35164Smarc */ 31*35164Smarc #define relstak() (staktop-stakbot) 32*35164Smarc #define absstak(x) (stakbot+Rcheat(x)) 33*35164Smarc #define setstak(x) (staktop=absstak(x)) 34*35164Smarc #define pushstak(c) (*staktop++=(c)) 35*35164Smarc #define zerostak() (*staktop=0) 36*35164Smarc #define savstak() (stakbot) 37*35164Smarc 38*35164Smarc /* 39*35164Smarc * Used to address an item left on the top of 40*35164Smarc * the stack (very temporary) 41*35164Smarc */ 42*35164Smarc #define curstak() (stakbot) 43*35164Smarc 44*35164Smarc /* 45*35164Smarc * `usestak' before `pushstak' then `fixstak' 46*35164Smarc * These routines are safe against heap 47*35164Smarc * being allocated. 48*35164Smarc */ 49*35164Smarc #define usestak() {locstak();} 50*35164Smarc 51*35164Smarc /* 52*35164Smarc * for local use only since it hands 53*35164Smarc * out a real address for the stack top 54*35164Smarc */ 55*35164Smarc STKPTR locstak(); 56*35164Smarc 57*35164Smarc /* 58*35164Smarc * Will allocate the item being used and return its 59*35164Smarc * address (safe now). 60*35164Smarc */ 61*35164Smarc #define fixstak() endstak(staktop) 62*35164Smarc 63*35164Smarc /* 64*35164Smarc * For use after `locstak' to hand back 65*35164Smarc * new stack top and then allocate item 66*35164Smarc */ 67*35164Smarc STKPTR endstak(); 68*35164Smarc 69*35164Smarc /* 70*35164Smarc * Copy a string onto the stack and 71*35164Smarc * allocate the space. 72*35164Smarc */ 73*35164Smarc STKPTR cpystak(); 74*35164Smarc 75*35164Smarc /* Allocate given amount of stack space */ 76*35164Smarc STKPTR getstak(); 77*35164Smarc 78*35164Smarc /* 79*35164Smarc * A chain of ptrs of stack blocks that 80*35164Smarc * have become covered by heap allocation. 81*35164Smarc * `tdystak' will return them to the heap. 82*35164Smarc */ 83*35164Smarc extern BLKPTR stakbsy; 84*35164Smarc 85*35164Smarc /* Base of the entire stack */ 86*35164Smarc extern STKPTR stakbas; 87*35164Smarc 88*35164Smarc /* Top of entire stack */ 89*35164Smarc extern STKPTR brkend; 90*35164Smarc 91*35164Smarc /* Base of current item */ 92*35164Smarc extern STKPTR stakbot; 93*35164Smarc 94*35164Smarc /* Top of current item */ 95*35164Smarc extern STKPTR staktop; 96*35164Smarc 97