An Exception Procedure is a procedure which is only executed when a Block is abnormally exited.
A Block is abnormally exited in these cases,
It must be an Untyped Procedure with No Parameters.
A Block which contains an Exception Procedure must have a Software Control Word with the OnGoPastF flag set, and immediately below the SCW there must be the PCW for the Exception Procedure.
001F (02,0009) 6 900000 000000 SCW: Blockexit marker: On-GoPast Procedure 001E (02,0008) 7 A00014 301DE0 PCW: ASD=00EF05, LL=3, Segment @ 0003:0000:5, Normal state 001D (02,0007) 7 A00064 301DE0 Q (Procedure) ASD=00EF05, LL=3, Segment @ 0003:0003:1, Normal state 001C (02,0006) 7 A00014 301DE0 EXCEPT (Epilog procedure) ASD=00EF05, LL=3, Segment @ 0003:0000:5, Normal state
The Algol Compiler recreates the PCW for the Exception Procedure before storing the SCW, so there are 2 copies of the PCW, the other one being at the point of declaration.
A Block may contain either an Epilog Procedure or an Exception Procedure but not both.
The rule about it being an Untyped Procedure can be ignored if absolutely necessary, as described by this note in the MCP at 24241810 in SearchBlock,
PROCEDURE CALLEXCEPTIONHANDLER; BEGIN [ CONTROLSTATE, SEGMENT=GOTOSOLVER] % EXCEPTIONHANDLER can return a value. This is allowed % (sigh) to enable PASCAL to generate code that will % call the ONGOPAST procedure from other locations as % well, using the returned value in those cases. We % will call it from this activation record so that any % value that might be returned will be discarded when % this activation record is exited. EXCEPTIONHANDLER; END CALLEXCEPTIONHANDLER;