erf, je me connectais pour poster exactement le même bout de code
Je l'ai fait en asm, je ne l'ai pas testé, j'espère qu'il n'y a pas de bug :
juste avant d'appeler le programme, on trouve l'ancre de la liste chaînée des ERROR_FRAMEs :
move.l ($C8).w,a5
lea -$3C(a7),a7 ; de la place pour un ERROR_FRAME
pea (a7)
move.l ER_catch*4(a5),a0
jsr (a0) ; un ER_catch bidon
lea ERR_FRAME_anchor(pc),a0
move.l $38(a7),(a0) ; l'ancre de la liste chaînée
move.l ER_success*4(a5),a0
jsr (a0) ; on supprime l'ER_FRAME bidon de la liste
lea $3C+4(a7),a7
(...)
ERR_FRAME_anchor dc.l 0
Puis juste après l'exécution du programme, on regarde si l'ancre a bougé, si c'est le cas on enlève tous les ERR_FRAME en trop dans la liste chaînée :
move.l ($C8).w,a5
lea ERR_FRAME_anchor(pc),a0
move.l (a0),d4
lea -$3C(a7),a7 ; de la place pour un ERROR_FRAME
FreeErrFrames:
move.l a7,-(a7)
move.l ER_catch*4(a5),a0
jsr (a0) ; un ER_catch bidon
move.l $38(a7),d3 ; l'ancre actuelle de la liste chaînée
move.l ER_success*4(a5),a2
jsr (a2) ; on supprime l'ER_FRAME bidon de la liste
cmp.l d3,d4 ; l'ancre actuelle est-elle l'ancienne ancre ?
beq.s FreeErrFramesDone ; oui -> on a tout nettoyé
move.l d3,(a7) ; sinon on supprime l'ERR_FRAME en trop
jsr (a2)
addq.w #4,a7
bra.s FreeErrFrames ; on verifie s'il n'y a oas
FreeErrFramesDone:
lea $3C+4(a7),a7