(* Пример использования процедур sigsetjmp и siglongjmp *)
uses linux,stdio;

var 
  position:sigjmp_buf;

procedure domenu;
var 
  choice:integer;
begin
  write('Choice menu entry:'#$a' menu 1'#$a' menu 2'#$a' menu 3'#$a'?>');
  scanf('%d',[@choice]);
end;

procedure goback(smth:longint);cdecl;
begin
  fprintf (stderr, #$a'Прерывание'#$a, []);
  (* Вернуться в сохраненную позицию *)
  siglongjmp (position, 1);
end;

var 
  act:sigactionrec;

begin
  (*
     .
     .
     . *)
  (* Сохранить текущее положение *)
  if sigsetjmp(position, 1) = 0 then
  begin
    act.handler.sh := @goback;
    sigaction (SIGINT, @act, nil);
  end;
  domenu;
  (*
   .
   .
   . *)
end.

