# /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" BLKPTR stakbsy; STKPTR stakbas; STKPTR brkend; STKPTR stakbot=(STKPTR) nullstr; STKPTR staktop; /* ======== storage allocation ======== */ STKPTR getstak(asize) POS asize; { /* allocate requested stack */ REG STKPTR oldstak; REG POS 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-stakbotADR(x) DO free(stakbsy); stakbsy = stakbsy->word; OD staktop=stakbot=max(ADR(x),ADR(stakbas)); rmtemp((IOPTR) x); } VOID stakchk() { IF (brkend-stakbas)>BRKINCR+BRKINCR THEN setbrk(-BRKINCR); FI } STKPTR cpystak(x) CSTKPTR x; { return(endstak(movstr(x,locstak()))); }