/* smallsig.c L. Stewart August 24, 1982 11:31 AM */ /* 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. */ extern MyFrame(); extern CallersFrame(); extern ReturnLoc(); extern ReturnTo(); 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); };