📄 stak.c
字号:
#/* * 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())));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -