![]() |
is possible a variable goto or gosub? - Printable Version +- Forum (https://www.boriel.com/forum) +-- Forum: Compilers and Computer Languages (https://www.boriel.com/forum/forumdisplay.php?fid=12) +--- Forum: ZX Basic Compiler (https://www.boriel.com/forum/forumdisplay.php?fid=11) +---- Forum: Help & Support (https://www.boriel.com/forum/forumdisplay.php?fid=16) +---- Thread: is possible a variable goto or gosub? (/showthread.php?tid=1443) |
is possible a variable goto or gosub? - maeloterkim - 09-27-2021 Hi in the original ZX spectrum basic you can do this goto MyVariable or gosub MyVariable where this variable must be a line number this way we can goto or gosub to diferents routines that are in diferents line numbers but i tried this example with the compiler and says error: Syntax Error. Unexpected token 'MyRoutines' <ARRAY_ID> This is the example you can try: dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1 @MyRoutine2, _ '' address of my routine 2 @MyRoutine3 _ '' address of my routine 3 } dim myVariable as uByte = 1 gosub MyRoutines(myVariable) '' you can try goto too myLoop: goto myLoop MyRoutine1: print "MyRoutine 1" return MyRoutine2: print "MyRoutine 2" return MyRoutine3: print "MyRoutine 3" return Is possible do something like that without a lot of ifs ? I think i found a solution The solution i found is this: dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1 @MyRoutine2, _ '' address of my routine 2 @MyRoutine3 _ '' address of my routine 3 } dim myVariable as uByte = 0 poke uInteger (@pokeGosub1 + 1), MyRoutines(myVariable) pokeGosub1: gosub MyRoutine1 myLoop: goto myLoop MyRoutine1: print "MyRoutine 1" return MyRoutine2: print "MyRoutine 2" return MyRoutine3: print "MyRoutine 3" return I do a poke with the routine direction just before the gosub maybe you can implement this with the compiler this way the behaviour is more like the original ZX spectrum ![]() RE: is possible a variable goto or gosub? - boriel - 09-28-2021 (09-27-2021, 01:50 PM)maeloterkim Wrote: Hi You don't need all of this. Use ON ... GOTO / ON GOSUB instead. Code: on myVariable gosub MyRoutine1, MyRoutine2, MyRoutine3 Try this, and let me know if it works. ![]() RE: is possible a variable goto or gosub? - maeloterkim - 09-28-2021 (09-28-2021, 07:41 PM)boriel Wrote:(09-27-2021, 01:50 PM)maeloterkim Wrote: Hi Yes it works But i didnt found this ON .. GOTO OR GOSUB in the documentation ( https://zxbasic.readthedocs.io/en/docs/identifier/ ) maybe there is something or a lot more that we dont know ![]() RE: is possible a variable goto or gosub? - boriel - 09-29-2021 (09-28-2021, 09:56 PM)maeloterkim Wrote:(09-28-2021, 07:41 PM)boriel Wrote:(09-27-2021, 01:50 PM)maeloterkim Wrote: Hi Unfortunately (I checked yesterday) GOTO / GOSUB and IN documentation is lost (I moved the wiki long ago, some documents were not restored correctly). I'll put them back. Thanks for reporting. If you find any other broken link, please let me know. |