#include <setjmp.h>
#include <stdio.h>

jmp_buf env;

void g()
{
  longjmp (env, 2);
}

void f()
{
  int zufall;
  if (zufall)
    g();
  else
    longjmp (env, 1);
}

int main ()
{
  switch (setjmp (env))
    {
    case 0:                      /* try */
      printf ("Kontext gesichtert. Rufe f() auf...\n");
      f();
      printf ("Fertig.\n");
      break;
    case 1:                      /* catch ...*/
      printf ("Zurueck aus f().\n");
      break;
    case 2:
      printf ("Zurueck aus g().\n");
      break;
    default:
      printf ("Unbekannter Fehler!\n");
      break;
    }
  return 0;
}

/* Local Variables:
   compile-command: "gcc -Wall -g longjump.c -o longjump"
   End:
*/
