home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / sh / stak.h < prev    next >
Encoding:
Text File  |  1979-01-12  |  1.6 KB  |  77 lines

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