#
 mes 2,EM_WSIZE,EM_PSIZE
save
        bss EM_PSIZE,0,0
trf
        bss EM_PSIZE,0,0

 exp $_setsig
 pro $_setsig,0
 lal 0
 loi EM_PSIZE
 lae trf
 sti EM_PSIZE
 inp $catchit
 lpi $catchit           ; trap to catchit
 sig
 lae save               ; remember higher level trap
 sti EM_PSIZE
 ret 0
 end

 pro $catchit,0
 lpi $catchit
 sig
 asp EM_PSIZE
 lol 0                  ; fetch trapno
 lae trf
 loi EM_PSIZE           ; fetch procedure identifier
 cai
 lfr EM_WSIZE
 zne *1
 ; trap not handled by trf function, trap through; trapno still on stack
 lae save
 loi EM_PSIZE
 sig
 asp EM_PSIZE
 trp
 lpi $catchit           ; trap ignored, further traps to catchit
 sig
 asp EM_PSIZE
 lae save               ; remember higher level trap
 sti EM_PSIZE
1
 rtt
 end