30 lines
503 B
C
30 lines
503 B
C
|
/* $Header $ */
|
||
|
|
||
|
#define MAXNESTING 1000
|
||
|
|
||
|
int _gotable[MAXNESTING];
|
||
|
int topstk=0;
|
||
|
|
||
|
_gosub(x)
|
||
|
int x;
|
||
|
{
|
||
|
/* administer gosub */
|
||
|
#ifdef DEBUG
|
||
|
printf("store %d in %d\n",x,topstk);
|
||
|
#endif
|
||
|
if( topstk== MAXNESTING) error(26);
|
||
|
_gotable[topstk]= x;
|
||
|
topstk++;
|
||
|
}
|
||
|
_retstmt()
|
||
|
{
|
||
|
/* make sure that a return label index is on top
|
||
|
of the stack */
|
||
|
#ifdef DEBUG
|
||
|
printf("return to %d %d\n",_gotable[topstk-1],topstk-1);
|
||
|
#endif
|
||
|
if( topstk==0 || topstk==MAXNESTING)
|
||
|
error(1);
|
||
|
return( _gotable[--topstk]);
|
||
|
}
|