home *** CD-ROM | disk | FTP | other *** search
- #
- /*
- * UNIX shell
- *
- * S. R. Bourne
- * Bell Telephone Laboratories
- *
- */
-
- #include "defs.h"
-
- STKPTR stakbot=nullstr;
-
-
-
- /* ======== storage allocation ======== */
-
- STKPTR getstak(asize)
- INT asize;
- { /* allocate requested stack */
- REG STKPTR oldstak;
- REG INT size;
-
- size=round(asize,BYTESPERWORD);
- oldstak=stakbot;
- staktop = stakbot += size;
- return(oldstak);
- }
-
- STKPTR locstak()
- { /* set up stack for local use
- * should be followed by `endstak'
- */
- IF brkend-stakbot<BRKINCR
- THEN setbrk(brkincr);
- IF brkincr < BRKMAX
- THEN brkincr += 256;
- FI
- FI
- return(stakbot);
- }
-
- STKPTR savstak()
- {
- assert(staktop==stakbot);
- return(stakbot);
- }
-
- STKPTR endstak(argp)
- REG STRING argp;
- { /* tidy up after `locstak' */
- REG STKPTR oldstak;
- *argp++=0;
- oldstak=stakbot; stakbot=staktop=round(argp,BYTESPERWORD);
- return(oldstak);
- }
-
- VOID tdystak(x)
- REG STKPTR x;
- {
- /* try to bring stack back to x */
- WHILE ADR(stakbsy)>ADR(x)
- DO free(stakbsy);
- stakbsy = stakbsy->word;
- OD
- staktop=stakbot=max(ADR(x),ADR(stakbas));
- rmtemp(x);
- }
-
- stakchk()
- {
- IF (brkend-stakbas)>BRKINCR+BRKINCR
- THEN setbrk(-BRKINCR);
- FI
- }
-
- STKPTR cpystak(x)
- STKPTR x;
- {
- return(endstak(movstr(x,locstak())));
- }
-