/* smallsig.c
  L. Stewart March 30, 1982  5:33 PM
 */

/* very simple non-local goto.
  call ssenable with a pointer to a three word block of storage.
  It will return 0.
  Later, call ssreturn with the same pointer and some (non-zero!)
  return value.  The call to ssenable will seem to occur again,
  returning the new result.
 */

struct ssig {
  int ssframe;
  int ssenframe;
  int sscontinue;
  };

int ssenable(ss)
  struct ssig *ss;
  {
  ss->ssenframe = myframe();
  ss->ssframe = callersframe(myframe());
  ss->sscontinue = returnloc(myframe());
  return(0);
  };

int ssreturn(ss, result)
  struct ssig *ss;
  int result;
  {
  returnto(ss->ssenframe, ss->ssframe, ss->sscontinue, result);
  };