Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!mcsun!sunic!draken!d88-eli From: d88-eli@nada.kth.se (Erik Liljencrantz) Newsgroups: comp.lang.pascal Subject: Re: exiting some calling ancestor in Turbo Pascal 5 Message-ID: <2554@draken.nada.kth.se> Date: 17 Dec 89 17:05:39 GMT References: <8912141752.aa23459@ICS.UCI.EDU> <122@crucible.UUCP> <2551@draken.nada.kth.se> Reply-To: d88-eli@nada.kth.se (Erik Liljencrantz) Organization: Royal Institute of Technology, Stockholm, Sweden Lines: 100 I mentioned SetJmp and LongJmp in a previous posting. Now they exist! They can be used like this to accomplish multilevel exit: VAR ErrorOccured:Jmp_Buf; PROCEDURE WantToExit; BEGIN ... LongJmp(ErrorOccured,1); { Instead of Exit } ... END; PROCEDURE Demo; BEGIN IF SetJmp(ErrorOccured)<>0 THEN BEGIN ... { LongJmp(ErrorOccured,1) will arrive here } Exit; { Exit out of this function too } END; ... WantToExit; ... END; Below is a uuencoded version of jmpunit.zoo. Contents: jmpunit.pas Pascal unit source jmpunit.asm Assembly source for SetJmp and LongJmp jmpunit.obj Assembled jmpunit.asm testjmp.pas Demonstration program (very short) Send your comments (and new nice ideas) to me... --- Erik Liljencrantz | "No silly quotes!!" d88-eli@nada.kth.se | Embraquel D. Tuta begin 644 jmpunit.zoo M6D]/(#(N,#`@07)C:&EV92X:``#-+*4&"```1P0```$```````````!J;7!U;FET+F%S M;0!T"@!_84D`````````````0"DC*```J22APJ0(B(,'E;2!4\5-&CH-%$3< M`>**G(=TRK@!(28/B"(7UX!@DH:-&HUCY(1Q0TI)49AJZ#%LZ@Q.&D;,&SME1D=D\F1($"93(`0" M$$"D19$1:;1&!E71+0>"&@M]T9L9("3FE1QD1/3%%%`(B%`1453AX4$H7/&$ M%$2```454H``0PH:"M'AB""*.&*))Z:X8HLRP*C`%T,$2&.((X9G(HHJL@@" M#3Y^D<2,'M98)(Y([@B"#3Y&-,031!CD85Q'-/$6%2`(D045!D%1A1!L#1%1 MD0@%,<4458AY4)`Z;-FE@494X<00`CWAQ$%"$;50>%8$T:(0=9AA1DXZ3!$& M?E/0\5@94M`4%1DIZ)"$$V@>4804.Z15J%,(02%%?R`8H6A$:K+9EH"G+O0F MG"`T\80510J!!0LXCKC# M$4,%!46TU1*18K6_XI"MMD-L-T8=;%SJ+0AF@#?&=FSD!*Z'TQ99A+);'-N% M"QM"P8*UVDJ*7V%T%+9145\P*IT"V>9+([_^`BPC"S+>*Z#$'EJ;[++-R@`M MQ+AR+."^RU8,Y!0#8Z$Q0B;'>2V_OHX<\:[Z4IS$OTX*;.W+!V%Q8I$>$WPN M0CL8`=88=*2Q5&)SL)LP#$"#($419(Y(0T2U&O6A$T1\*Y%:JO97!!%57*T4 M4T6AX/"CN2@'K MFFT*>#C;MI(,9\P'^0JLV#=3V_',(&/A;!=P;MLMU%)7/331OQI]-`@[-!'& M&H1%G1C"?('@QE)ZY/1&U4HXH461!`8AQU=Y5?TI5^2^[N$.221\1W$@]'Y\ M"%8/58<<&\6@\!P9A4'&:,4?#Q89/8D;3W!4;%)F/Z(X#('CBB`'&(!!0T8,&TI,"J$"98+/:2F M*2`A@EAPGH!V``78H&%_&-0@1'8HH![^,(1"1%H1YW#$Z)@AA56[6M:BB*L= M9(H.V]N(_N8PMZ3@Z4G[0=RA#O*6L*5%3UXZ&=BF$)$V1D0#`0'@`@R9TZ9-F+8E)$#`H25D7/2O'$#(H8+&#$0(9H``$BZ&XTB32AX,.'" MA@\G(1I0,QT32P(HHK%D``"!(4^(%"F"Z0``%$<`"`@0P!VD@0`"&)A2A(I! M*!0!)(+D@&*``TR>.#ERU@3%#H@(U!05(!*H)6$I+N)F@]@?`HN(%4``P$2B M`H[;"+"QZ(@`QT4(4#Z`V<`,8,KT#J9\A,`"8'4"`"G\QX")19)?-R'PNHKK M126B2%F&25%2`'0"`MRGQ/T"`7`(```A!@``D1-;AW/\`0,``$\"```!```` M````````:FUP=6YI="YP87,`=`H`?[&9`````````````$`I(R@``*LX24*E M@0(0()2T@5/%31HZ.PP:W`/BBIR'=,JX`2$F#X@B%]>`8)*&C1J-8^2$<4-' M#X@8-T`0*3.F3!LQ9>2\S($C!X@^$A50G%*&CD(X(%:2&?G&S9FC(.Z\D;-F M3E*K=-"42:-S"(@Q;^JPS`DGC!PZL#HGK)R:8`.#2&-5JQS0'LDT#9-Q M*9TWG+6"@%-'#)LT8P"_:1/FL0N#"!%F"0N"NT"&V&TX=D;9H`77F<@3)7&&8^%P492=63E M%PH@I2$222:AI!)+>J0PG%6/C<%&'8$M%888;]A1QFE!)>%$7%(8$41K05&1 M!11%.'C4%T+4848/4A0QQ!-2$.$@0E-`P8(04@XQ!0M)0*'#%4P2$=%!'SGA M95!&"#0$%4D\X02414&%@A5!2`%"D6:8D9,.0]*9@@XVQG5$$5)\"8443[1& M1!5),N7442C0::<<>"Y$I)$[@""%9'6P00>?-Q;QIQ0I?&E0$G8Q4403KE$1 M!)IJDFDFJVN"0)11"RD&IYR.WIFGD7OVZ2F@E1:!!8Y.!,&$H(0:BF@1BCZU M4*-&/AHI').:4>FE^Q$)#`Q&T,.T8&:0:X1\9T"&@0$ MW*?$_0(!?PH``+<(``"1$T2/+;ME`@``R`$```$```````````!T97-T:FUP M+G!A$E3)R\H"8TR8,&S8@X,AY>>-G#5S0(1Q0P8$F3)MWKAA:)).&8D@-J9YR*9FG3EASM1\8P;$E#(- M'PHE"H*)TC,W78#H(Y%B0IHA1Y8\">).FH]QT[AQ*<*L&[1B[X0).L9C53(A M1-2EZ0:$G#INU+*=J*`B$:0K[<[<^*:.G#$UCXJI2&[YDC2:,9'I>DR3:2VRJH,J7(E-0W<^Z,2-E*$"FI M"5&'&69@I,--7PAH!G\2"?3$$$40484418!`Q!M3O-$&6&AXQY\011R1A!.I M^048'"@H6*`<+,0`0PK\%>$$$0PJ`**()"H051)&('=3B@.NF`(//L"0$!(R M@G#CB*E%]5QTTZ%P@HDWU348",4=%L(),$8%0D5?N=3::['-MM=RM^6V6V\@ MT.1:""&LU20(1>"Q7VHRTIC:A1EN.).'$N6YG0(:!`3