GO TO? JUMP? [Solved]
|
11-25-2015, 03:08 PM
(This post was last modified: 09-06-2016 11:35 AM by jrozsas.)
Post: #1
|
|||
|
|||
GO TO? JUMP? [Solved]
Hello.
My question is how to create a return to a specific point of a program after sub. Example: 1: Export goto() 2: BEGIN 3: nonononono 4: nonoononon 5: nonononono 6: Text(); 7: END; 8: //sub Text 9: Text() 10: BEGIN 11: RECT; 12: TEXTOUT_P("Choose the function.",1,1,4); 13: WAIT(2); 14: END; How to return to the line "3" after running sub Text() ? Examples? Leo |
|||
11-25-2015, 03:22 PM
Post: #2
|
|||
|
|||
RE: GO TO? JUMP? | |||
11-25-2015, 03:29 PM
(This post was last modified: 11-25-2015 03:34 PM by Han.)
Post: #3
|
|||
|
|||
RE: GO TO? JUMP?
(11-25-2015 03:08 PM)jrozsas Wrote: Hello. In your sample code, a simple while loop would suffice: 1: Export goto() 2: BEGIN while 1 do 3: nonononono 4: nonoononon 5: nonononono 6: Text(); end 7: END; You can create the equivalent of goto using: Code: EXPORT MYPROG() Each if statement can be considered like a label for a code block. If you want to run through the entire set of blocks, set label:=#FFFFFh (here we are assuming only up to 2^20 labels). If you only want to jump to a specific code block, set label equal to that particular block (e.g. label:=#3h would only execute the third block). This particular scheme, however, would have severe runtime issues if you have many "labeled" blocks of code. I am not particularly fond of GOTO; they are great for assembly-level programs (in fact necessary) but in higher level languages I find that I seldom, if ever, use them. EDIT: Much of the code in the example can be made simpler through the use of subroutines. Graph 3D | QPI | SolveSys |
|||
11-25-2015, 04:47 PM
Post: #4
|
|||
|
|||
RE: GO TO? JUMP?
I thank the answers but do not understand. This is litle program that creates the menu, and after displaying the message in the sub(n), it should return to the line 13 (or 8?) to show the splash screen again.
1: SUB1(); 2: SUB2(); 3: SUB3(); 4: SUB4(); 5: SUB5(); 6: SUB6(); 7: EXPORT EC(x) 8: BEGIN 9: // CAS Custom Menu 10: // EWS 2014-04-20 11://splashscreen 12: LOCAL m,m1,mx,my; 13: WHILE MOUSE(1)≥0 DO END; 14: RECT; 15: TEXTOUT_P("How to GOTO?",1,1,4); 16: 17: 18: DRAWMENU("opt1","opt2","opt3","opt4","opt5","opt6"); 19: 20: REPEAT 21: m:=MOUSE; 22: m1:=m(1); 23: UNTIL SIZE(m1)>0; 24: mx:=m1(1); 25: my:=m1(2); 26: 27: 28: 29: IF mx≥0 AND mx≤51 THEN 30: SUB1(); 31: END; 32: IF mx≥53 AND mx≤104 THEN 33: SUB2(); 34: END; 35: IF mx≥106 AND mx≤157 THEN 36: SUB3() 37: END; 38: 39: IF mx≥159 AND mx≤210 THEN 40: SUB4(); 41: END; 42: 43: IF mx≥212 AND mx≤263 THEN 44: SUB5(); 45: END; 46: 47: IF mx≥265 AND mx≤319 THEN 48: SUB6(); 49: END; 50: 51: END; 52: 53: //SUB1 54: SUB1() 55: BEGIN 56: RECT; 57: TEXTOUT_P("PRESS SUB1",1,1,4); 58: WAIT(2); 59: END; 60: 61: //SUB2 62: SUB2() 63: BEGIN 64: RECT; 65: TEXTOUT_P("PRESS SUB1",1,1,4); 66: WAIT(2); 67: END; 68: 69: //SUB3 70: SUB3() 71: BEGIN 72: RECT; 73: TEXTOUT_P("PRESS SUB1",1,1,4); 74: WAIT(2); 75: END; 76: 77 //SUB4 78: SUB4() 79: BEGIN 80: RECT; 81: TEXTOUT_P("PRESS SUB1",1,1,4); 82: WAIT(2); 83: END; 84: 85: //SUB5 86: SUB5() 87: BEGIN 88: RECT; 89: TEXTOUT_P("PRESS SUB1",1,1,4); 90: WAIT(2); 91: END; 92: 93: //SUB6 94: SUB6() 95: BEGIN 96: RECT; 97: TEXTOUT_P("PRESS SUB1",1,1,4); 98: WAIT(2); 99: END; [/font] Leo |
|||
11-25-2015, 05:03 PM
Post: #5
|
|||
|
|||
RE: GO TO? JUMP?
something like that :
Code:
By adding 2 lines : WHILE and corresponding END It's just a simple implementation, you can improve this by adding a loop condition ( to avoid leaving only by ON key)... primer |
|||
11-25-2015, 05:17 PM
(This post was last modified: 11-25-2015 05:36 PM by jrozsas.)
Post: #6
|
|||
|
|||
RE: GO TO? JUMP?
tks primer
tks Han ! its work Leo |
|||
11-25-2015, 05:27 PM
(This post was last modified: 11-25-2015 05:29 PM by jrozsas.)
Post: #7
|
|||
|
|||
RE: GO TO? JUMP?
another REPEAT -- UNTIL 0 also works well.
Code: SUB1(); SUB2(); SUB3(); SUB4(); SUB5(); SUB6(); EXPORT EC(x) BEGIN // CAS Custom Menu // EWS 2014-04-20 REPEAT // this new REPEAT works! LOCAL m,m1,mx,my; WHILE MOUSE(1)≥0 DO END; RECT; TEXTOUT_P("How to GOTO?",1,1,4); DRAWMENU("opt1","opt2","opt3","opt4","opt5","Sair"); REPEAT m:=MOUSE; m1:=m(1); UNTIL SIZE(m1)>0; mx:=m1(1); my:=m1(2); IF mx≥0 AND mx≤51 THEN SUB1(); END; IF mx≥53 AND mx≤104 THEN SUB2(); END; IF mx≥106 AND mx≤157 THEN SUB3() END; IF mx≥159 AND mx≤210 THEN SUB4(); END; IF mx≥212 AND mx≤263 THEN SUB5(); END; IF mx≥265 AND mx≤319 THEN SUB6(); END; UNTIL 0; END; //SUB1 SUB1() BEGIN RECT; TEXTOUT_P("PRESS SUB1",1,1,4); WAIT(2); END; //SUB2 SUB2() BEGIN RECT; TEXTOUT_P("PRESS SUB2",1,1,4); WAIT(2); END; //SUB3 SUB3() BEGIN RECT; TEXTOUT_P("PRESS SUB3",1,1,4); WAIT(2); END; //SUB4 SUB4() BEGIN RECT; TEXTOUT_P("PRESS SUB4",1,1,4); WAIT(2); END; //SUB5 SUB5() BEGIN RECT; TEXTOUT_P("PRESS SUB5",1,1,4); WAIT(2); END; //SUB6 SUB6() BEGIN KILL; //RECT; //TEXTOUT_P("PRESS SUB6",1,1,4); //WAIT(2); END; Leo |
|||
11-25-2015, 05:29 PM
Post: #8
|
|||
|
|||
RE: GO TO? JUMP?
Thanks people!
Leo |
|||
11-26-2015, 12:05 AM
(This post was last modified: 11-26-2015 01:31 AM by ji3m.)
Post: #9
|
|||
|
|||
RE: GO TO? JUMP?
Not quite a go to but a jump table way(or should i say call table)
SUB1 () begin .. end ; ... SUB6 () begin end; //somewhere in your code //mx is mouse x position local jmplist := {'SUB1', 'SUB2', ... 'SUB6'}; // then .... eval( jmplist ( IP (mx/51) ) ); // a call to one of the subs //return is here ... This works nicely for function with no arguments. The single quotes on the func names are crucial. I work with android Prime only for now on my Galaxy Tab Pro/Note 2 |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)