Ultrix-3.1/src/cmd/sh5/stak.c
/**********************************************************************
* Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. *
* All Rights Reserved. *
* Reference "/usr/src/COPYRIGHT" for applicable restrictions. *
**********************************************************************/
/*
* SCCSID: @(#)stak.c 3.0 4/22/86
* (System V) stak.c 1.4
*/
/*
* UNIX shell
*
* Bell Telephone Laboratories
*
*/
#include "defs.h"
/* ======== storage allocation ======== */
char *
getstak(asize) /* allocate requested stack */
int asize;
{
register char *oldstak;
register int size;
size = round(asize, BYTESPERWORD);
oldstak = stakbot;
staktop = stakbot += size;
return(oldstak);
}
/*
* set up stack for local use
* should be followed by `endstak'
*/
char *
locstak()
{
if (brkend - stakbot < BRKINCR)
{
if (setbrk(brkincr) == -1)
error(nostack);
if (brkincr < BRKMAX)
brkincr += 256;
}
return(stakbot);
}
char *
savstak()
{
assert(staktop == stakbot);
return(stakbot);
}
char *
endstak(argp) /* tidy up after `locstak' */
register char *argp;
{
register char *oldstak;
*argp++ = 0;
oldstak = stakbot;
stakbot = staktop = (char *)round(argp, BYTESPERWORD);
return(oldstak);
}
tdystak(x) /* try to bring stack back to x */
register char *x;
{
while ((char *)(stakbsy) > (char *)(x))
{
free(stakbsy);
stakbsy = stakbsy->word;
}
staktop = stakbot = max((char *)(x), (char *)(stakbas));
rmtemp(x);
}
stakchk()
{
if ((brkend - stakbas) > BRKINCR + BRKINCR)
setbrk(-BRKINCR);
}
char *
cpystak(x)
char *x;
{
return(endstak(movstr(x, locstak())));
}