Alles anzeigenHier noch einmal ein theoretischer Verweis, wie man Funktionen als Programm-Container umprogrammieren kann.
Das Basic-Fan Beispiel zeigt, wie man mit einer Funktion, ähnlich wie in C den Cursor setzen kann.
Quellcode:
- 0 :rem----cursor setzen mit funktion
- 1 :poke785,228:poke786,167:re=59736:gosub10:rem--vektor+definition
- 2 :a=fncp(5.10):print"p1": :rem---beispiel 1
- 3 :print chr$(fncp(10.12))"p2": :rem---beispiel 2
- 4 :printfncp(15.14)"[3xlinks]p3": :rem---beispiel 3
- 5 :end
- 9 :
- 10 :deffn cp(a)=.*usr(.);if.then:return
- 11 :poke214,a:poke211,(a-int(a))*101:sys58640:sysre
Schönen Gruß.
Ein sehr erhellendes Beispiel wodurch mir die Funktionsweise der Konstrukte DEF FN (..) klarer geworden ist, danke.
Die Beispiele 1..3 zeigen m.E., dass man den Cursor auch separat positionieren kann ohne den User-Sprung innerhalb des Print-Statements verwenden zu müssen. Das scheint praktisch, wenn vor der eigentlichen Ausgabe noch eine Verzweigung stattfindet; so kann gemeinsamer Code vorgezogen (oder aus einer Schleife an den Anfang herausgezogen) werden.
Richtig clever im Sinn von übersichtlich finde ich die X,Y-Koordinaten in einer einzigen REAL-Zahl als Vorkomma-Nachkomma-Anteil zu übergeben!
Zwei Dinge sind mir noch aufgefallen bzw. unklar:
Wozu dient die Gestaltung re=59736, hat das mit dem USR-Pointer was zu tun? Auch, was das nachgestellte Sys re bewirkt.
Dass nach dem USR-Aufruf ";if.then:return" steht soll nur demonstrieren, dass die Maschinenroutine diesen Teil gar nicht mehr auswertet und zur nächsten Basic-Zeile gesprungen wird?
Mir ist auch nicht ganz klar, ob DEF FN in Verbindung mit USR die Beschränkung auf eine Zeile überwinden kann?
Und wo die Maschinenroutine des USR-Vektors steht - oder wird der gar nicht verbogen (?) wäre nett wenn du dazu ein paar Takte sagen könntest..