GoDot: Interessant, das TSB kannte ich bisher noch nicht. Ich habe auch erhlich gesagt nicht weiter geguckt, ob es schon ähnliche Ansätze gibt, die Idee kam mir, als ich mal etwas mit petcat rumgespielt habe. Vorteil gegenüber TSB ist natürlich, dass einfach normales Basic erzeugt wird und keine speziellen ROMs benötigt werden.
Beiträge von Henning im Thema „BASIC ohne Zeilennummern schreiben“
-
-
Natürlich ist das sinnfrei, es handelt sich ja auch um ein Beispiel. Es sollte damit nur gezeigt werden, wie eine externe Datei als Bibliothek von Subroutinen in einen beliebigen Namensraum eingebunden werden kann. -
Der Präprozessor weiß von Basic eigentlich nur, dass es zeilenbasiert ist, wie die Schlüsselworte heißen (d.h. welche Worte nicht als Labels gelten dürfen) und dass es aus String-Literalen und irgendwelchen anderen Zeichen ("Code") aufgebaut ist und an welchen Stellen in diesem "Code" (on/goto/gosub/then) Labels stehen könnten, die dann aufzulösen sind. Er würde also auch fröhlich irgendwelchen Klumpatsch parsen, durchnummerieren und ausgeben, solange er alle Label-Referenzen, die er darin zu finden glaubt, zu Zeilennummern auflösen kann.
Es ist also lange kein vollständiger Basic-Parser und er weiß daher auch garnicht, was ein "goto" im Gegensatz zu einem "gosub" überhaupt im Hinblick auf den Programmfluß bedeutet und welche gotos u.U. daher überflüssig wären. Ist halt "nur" ein kleiner Präprozessor, der diese fürchterlichen Zeilennummern überflüssig macht

-
Hier mal ein einfacher BASIC-Präprozessor, der in Verbindung mit petcat das Entwickeln von Basic-Programmen am PC vereinfachen kann.
Statt Zeilennummern zu verwenden kann man damit Basic auch so schreiben:
Datei "example.bpp":
Code
Alles anzeigengoto main screen: { !include source "screen.bpp" } main: { gosub screen.clear gosub screen.theme ask: print "how do you feel?":print print "1) i feel great!" print "2) nothing to complain about" print "3) not so well..." print "4) quit asking" print input a rem check the range... if a < 1 goto error if a > 4 goto error print rem give the answer... on a gosub answer.good, answer.neutral, answer.bad, done rem repeat... gosub delay goto main error: print: print "please enter a number between 1 and 4!": gosub delay: gosub screen.clear goto ask answer: { good: print "well that's swell!": goto done neutral: print "ok, carry on then...": goto done bad: on int(rnd(23)*3)+1 goto one, two, three one: print "here, have a cookie!": goto done two: print "dont' worry, be happy!": goto done three: print "cheer up!": goto done done: return } } done: print: print "see ya!": end delay: { for i = 0 to 1024: next i: return }Datei "screen.bpp":
Aufruf:
Erzeugt:
Code
Alles anzeigen0 goto3 1 print"{clr}";:return 2 poke53280,0:poke53281,0:poke646,5:return 3 gosub1 4 gosub2 5 print"how do you feel?":print 6 print"1) i feel great!" 7 print"2) nothing to complain about" 8 print"3) not so well..." 9 print"4) quit asking" 10 print 11 inputa 12 ifa<1goto18 13 ifa>4goto18 14 print 15 onagosub21,22,23,28 16 gosub29 17 goto3 18 print:print"please enter a number between 1 and 4!" 19 gosub29:gosub1 20 goto5 21 print"well that's swell!":goto27 22 print"ok, carry on then...":goto27 23 onint(rnd(23)*3)+1goto24,25,26 24 print"here, have a cookie!":goto27 25 print"dont' worry, be happy!":goto27 26 print"cheer up!":goto27 27 return 28 print:print"see ya!":end 29 fori=0to1024:nexti:returnMit dem folgenden Aufruf kann aus dem ursprünglichen Dateien direkt ein PRG erzeugt werden:
Es können übrigens auch Binärdateien direkt als DATA-Zeilen eingebunden werden:
Der Präprozessor ist als einfacher Filter implementiert (Standard Ein/Ausgabe) und in ruby programmiert.
Bei Interesse findet ihr alles weitere auf Bitte melde dich an, um diesen Link zu sehen.