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

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)stak.c     4.2 8/11/83";
                      3: #endif
                      4: 
                      5: #
                      6: /*
                      7:  * UNIX shell
                      8:  *
                      9:  * S. R. Bourne
                     10:  * Bell Telephone Laboratories
                     11:  *
                     12:  */
                     13: 
                     14: #include       "defs.h"
                     15: 
                     16: STKPTR         stakbot=nullstr;
                     17: 
                     18: 
                     19: 
                     20: /* ========    storage allocation      ======== */
                     21: 
                     22: STKPTR getstak(asize)
                     23:        INT             asize;
                     24: {      /* allocate requested stack */
                     25:        REG STKPTR      oldstak;
                     26:        REG INT         size;
                     27: 
                     28:        size=round(asize,BYTESPERWORD);
                     29:        oldstak=stakbot;
                     30:        staktop = stakbot += size;
                     31:        return(oldstak);
                     32: }
                     33: 
                     34: STKPTR locstak()
                     35: {      /* set up stack for local use
                     36:         * should be followed by `endstak'
                     37:         */
                     38:        IF brkend-stakbot<BRKINCR
                     39:        THEN    setbrk(brkincr);
                     40:                IF brkincr < BRKMAX
                     41:                THEN    brkincr += 256;
                     42:                FI
                     43:        FI
                     44:        return(stakbot);
                     45: }
                     46: 
                     47: STKPTR savstak()
                     48: {
                     49:        assert(staktop==stakbot);
                     50:        return(stakbot);
                     51: }
                     52: 
                     53: STKPTR endstak(argp)
                     54:        REG STRING      argp;
                     55: {      /* tidy up after `locstak' */
                     56:        REG STKPTR      oldstak;
                     57:        *argp++=0;
                     58:        oldstak=stakbot; stakbot=staktop=round(argp,BYTESPERWORD);
                     59:        return(oldstak);
                     60: }
                     61: 
                     62: VOID   tdystak(x)
                     63:        REG STKPTR      x;
                     64: {
                     65:        /* try to bring stack back to x */
                     66:        WHILE ADR(stakbsy)>ADR(x)
                     67:        DO free(stakbsy);
                     68:           stakbsy = stakbsy->word;
                     69:        OD
                     70:        staktop=stakbot=max(ADR(x),ADR(stakbas));
                     71:        rmtemp(x);
                     72: }
                     73: 
                     74: stakchk()
                     75: {
                     76:        IF (brkend-stakbas)>BRKINCR+BRKINCR
                     77:        THEN    setbrk(-BRKINCR);
                     78:        FI
                     79: }
                     80: 
                     81: STKPTR cpystak(x)
                     82:        STKPTR          x;
                     83: {
                     84:        return(endstak(movstr(x,locstak())));
                     85: }

unix.superglobalmegacorp.com

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