franz/fex1.c
/*
   Ncatch is now linked to the lisp symbol *catch , which has the form
     (*catch tag form)
    tag is evaluated and then the catch entry is set up.
      then form is evaluated
    finally the catch entry is removed.

  *catch is still an nlambda since its arguments should not be evaluated
   before this routine is called.

   (catch form [tag]) is translated to (*catch 'tag form) by a macro.
 */
Ncatch is now linked to the lisp symbol *catch , which has the form
(*catch tag form)
tag is evaluated and then the catch entry is set up.
then form is evaluated
finally the catch entry is removed.

catch is still an nlambda since its arguments should not be evaluated
before this routine is called.

(catch form [tag]) is translated to (*catch 'tag form) by a macro.
Ncatch is now linked to the lisp symbol * catch which has the form ( * catch tag form ) tag is evaluated and then the catch entry is set up . then form is evaluated finally the catch entry is removed . catch is still an nlambda since its arguments should not be evaluated before this routine is called . ( catch form [ tag ] ) is translated to ( * catch ' tag form ) by a macro .
lispval
Ncatch()
{
	register lispval tag;
	pbuf pb;
	Savestack(3);		
	if((TYPE(lbot->val))!=DTPR) return(nil);
	protect(tag = eval(lbot->val->d.car));  
	errp = Pushframe(F_CATCH,tag,nil);
	switch(retval) {
	case C_THROW: 	
			break;
	case C_INITIAL: 
			 lispretval = eval(lbot->val->d.cdr->d.car);
	}
	errp = Popframe();
	Restorestack();
	return(lispretval);
}
lispval Ncatch ( ) { register lispval tag ; pbuf pb ; Savestack ( 3 ) ; if ( ( TYPE ( lbot -> val ) ) != DTPR ) return ( nil ) ; protect ( tag = eval ( lbot -> val -> d . car ) ) ; errp = Pushframe ( F_CATCH , tag , nil ) ; switch ( retval ) { case C_THROW : break ; case C_INITIAL : lispretval = eval ( lbot -> val -> d . cdr -> d . car ) ; } errp = Popframe ( ) ; Restorestack ( ) ; return ( lispretval ) ; }
Ncatch is now linked to the lisp symbol *catch , which has the form
(*catch tag form)
tag is evaluated and then the catch entry is set up.
Ncatch is now linked to the lisp symbol * catch which has the form ( * catch tag form ) tag is evaluated and then the catch entry is set up .
/* save stack pointers */ /* protect tag from gc */ /*
		       	 * value thrown is in lispretval
		       	 */ /*
			 * calculate value of expression
			 */