29 lines
		
	
	
	
		
			502 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			502 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]);
 | |
| }
 |