×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




Looking at an old program that using GOTO...I'd like to get rid of it.

In this case, it's a relatively simple usage

//mainline part1
if something goto @end
//mainline part2
if somethingelse goto @end
//mainline part 3
...
TAG @END
eval parm12 = *IN12;
return;

I see two options
1) dou loop
2) add an end_program subroutine

---Option 1---

dou *on = *on; //run once
//mainline part1
if something leave
//mainline part2
if somethingelse leave
//mainline part 3
enddo;
eval parm12 = *IN12;
return;

---Option 2---

//mainline part1
if something exsr @END_PROGRAM
//mainline part2
if somethingelse exsr @END_PROGRAM
//mainline part 3
...
exsr @END_PROGRAM
//shouldn't get here, but to be safe
return;

begsr @END_PROGRAM;
eval parm12 = *IN12;
return;
endsr;


Advantages to option 2 as I see them...
- works even if GOTO exists in a loop in the mainline
- works if GOTO is in an subroutine

note that the "eval parm12 = *IN12" line is due to refactoring a *ENTRY
PLIST into a PR/PI. *IN12 was specified as the factor 2 on the PARM
op-code for parm12. So I can't just change GOTO @END to RETURN.

Thoughts / comments on either of the above options?
Any additional tips or techniques?

Thanks!
Charles

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.