zOs/REXX.O13/EXSIGNAL

/* rexx *************************************************************** 00010000
     signal value ... ist ein dynamisches goTo, alle do,if usw.         00020000
              der aktuellen procedure werden verlassen,                 00030000
              aber nicht die procedure (erst beim nächsten return |)    00040000
     interpret ist sehr schnell,                                        00050000
              interpret call ... durch signal value zu simulieren       00060000
                   lohnt sich i.a. NICHT                                00070000
**********************************************************************/ 00080000
p0Cnt = 0                                                               00090000
p1Cnt = 0                                                               00100000
p2Cnt = 0                                                               00110000
p3Cnt = 0                                                               00120000
tms = 10000                                                             00130000
call showTime('start')                                                  00140000
do i=1 to tms                                                           00150000
    p0Cnt = p0Cnt + 1                                                   00160000
    end                                                                 00170000
call showTime(tms 'do + ' v p0Cnt)                                      00180000
do i=1 to tms                                                           00190000
    call p1proc i                                                       00200000
    end                                                                 00210000
call showTime(tms 'call p1Proc' p1Cnt)                                  00220000
do i=1 to tms                                                           00230000
    call p2sub i                                                        00240000
    end                                                                 00250000
call showTime(tms 'call p2Sub' p2Cnt)                                   00260000
i=1                                                                     00270000
Lab3:                                                                   00280000
    i = i + 1                                                           00290000
    p3Cnt = p3Cnt + 1                                                   00300000
    if i <= tms then                                                    00310000
        signal Lab3                                                     00320000
call showTime(tms 'signal lab3' p3Cnt)                                  00330000
do i=1 to tms                                                           00340000
    interpret 'p0Cnt =' p0Cnt '+ 1'                                     00350000
    end                                                                 00360000
call showTime(tms 'do interpret + ' v p0Cnt)                            00370000
v = 'p1Proc'                                                            00380000
do i=1 to tms                                                           00390000
    interpret 'call' v 'i'                                              00400000
    end                                                                 00410000
call showTime(tms 'interpret call' v p1Cnt)                             00420000
v = 'p2Sub'                                                             00430000
do i=1 to tms                                                           00440000
    interpret 'call' v 'i'                                              00450000
    end                                                                 00460000
call showTime(tms 'interpret call' v p2Cnt)                             00470000
i=1                                                                     00480000
v='LAB32'                                                               00490000
Lab32:                                                                  00500000
    i = i + 1                                                           00510000
    p3Cnt = p3Cnt + 1                                                   00520000
    if i <= tms then                                                    00530000
        signal value v                                                  00540000
                                                                        00550000
call showTime(tms 'signal value lab32' p3Cnt)                           00560000
call testSignal eins, 'tEins'                                           00570000
call testSignal 'Zwei', 'tZwei'                                         00580000
say 'signal testSignal'                                                 00590000
signal testSignal                                                       00600000
say 'after signal zwei'                                                 00610000
exit                                                                    00620000
                                                                        00630000
testSignal:                                                             00640000
parse upper arg goal, text                                              00650000
say 'testSignal' goal',' text                                           00660000
parse upper arg goal, text                                              00670000
say 'testSignal2' goal',' text                                          00680000
signal value goal                                                       00690000
eins:                                                                   00700000
    say 'after eins:'                                                   00710000
zwei:                                                                   00720000
    say 'after zwei:'                                                   00730000
drei:                                                                   00740000
    say 'after drei:'                                                   00750000
return                                                                  00760000
say 'after return of testSignal'                                        00770000
                                                                        00780000
p1proc: procedure expose p1Cnt                                          00790000
parse arg a1                                                            00800000
    p1Cnt = p1Cnt + 1                                                   00810000
return                                                                  00820000
                                                                        00830000
p2sub:                                                                  00840000
parse arg a1                                                            00850000
    p2Cnt = p2Cnt + 1                                                   00860000
return                                                                  00870000
                                                                        00880000
showTime:                                                               00890000
parse arg showmsg                                                       00900000
    say time() sysvar('syscpu') sysvar('syssrv') showmsg                00910000
return 0                                                                00920000