Annotation of 42BSD/bin/sh/stak.h, revision 1.1.1.1

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();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.