Seite 1 von 1

Editor für BASIC programme mit netten Features...

Verfasst: Donnerstag 10. Oktober 2013, 20:16
von jens
Eigentlich dachte ich, sollte es das schon geben... Habe aber nichts gefunden.

Ich hätter gern ein Text Editor der ein paar besondere Features für das Programmieren von BASIC programmen hätte.

Das wichtigste: Automatisierte Zeilennummern.
i.d.R. haben BASIC Interpreter den Eingebauten Befehl RENUM, damit werden alle Programmzeilen und GOTO/GOSUB Aufrufe umnummeriert.
Im Text editor sollte das vollkommen automatisch funktionieren.

In meinem Fall: Extended Color BASIC von Microsoft (s. http://de.wikipedia.org/wiki/Microsoft_BASIC ) ist es so, das bei Variablennamen nur die ersten beiden Zeichen (!) Berücksichtlicht werden :shock:
Deswegen hätte ich gern, das die ersten Beiden Zeichen hervorgehoben werden und auch ein "Verwechselungs Test" gemacht wird. Halt das Gewarnt wird, wenn man FOO=2 und FOOBAR = 2 gemacht wird.

Das ganze könnte ich später dann direkt an DragonPy koppeln, damit man direkt live das Programm testen kann.

Lokale-Links:
* DragonPy Emulator: http://www.python-forum.de/viewtopic.php?f=1&t=32089
* BASIC Lexer/Tokenizer: http://www.python-forum.de/viewtopic.php?f=1&t=32173

Re: Editor für BASIC programme mit netten Features...

Verfasst: Donnerstag 10. Oktober 2013, 20:36
von BlackJack
@jens: Für Zeilennummern habe ich mir einen ganz einfachen Präprozessor geschrieben der Programme ohne Zeilennummern mit Labels in welche mit Zeilennummern übersetzt.

Ich hatte da auch immer mal vor so etwas für Variablennamen zu machen. Also das lange zu kurzen gemacht werden. Entweder welche die man selber festlegt, beziehungsweise wenn man das nicht machen möchte, dann einfach generierte kurze Namen.

Das könnte man dann noch beliebig ausbauen. Zum Beispiel lokale Namen/Namensräume. Und Funktionen/Prozeduren wären auch nicht schlecht.

Re: Editor für BASIC programme mit netten Features...

Verfasst: Donnerstag 10. Oktober 2013, 22:26
von jens
BlackJack hat geschrieben:Ich hatte da auch immer mal vor so etwas für Variablennamen zu machen. Also das lange zu kurzen gemacht werden. Entweder welche die man selber festlegt, beziehungsweise wenn man das nicht machen möchte, dann einfach generierte kurze Namen.
Das Zusammenkürzen wäre auch eine Idee. Ich dachte ehr an einer Fehlermeldung.

Denke das erste was ich irgendwann mal angehen werde, wäre ein simples CLI skript was ein RENUM macht.

Re: Editor für BASIC programme mit netten Features...

Verfasst: Mittwoch 16. Juli 2014, 19:46
von jens
Ich würde das gern mal angehen.
BlackJack hat geschrieben:@jens: Für Zeilennummern habe ich mir einen ganz einfachen Präprozessor geschrieben der Programme ohne Zeilennummern mit Labels in welche mit Zeilennummern übersetzt.
Feindes du den code noch?

Re: Editor für BASIC programme mit netten Features...

Verfasst: Mittwoch 16. Juli 2014, 22:44
von BlackJack
@jens: Ich sag dann mal nein und tue so als wenn ich nur noch die *.pyc-Datei habe. Ernsthaft: Der Quelltext ist ganz furchtbar, den mag ich nicht zeigen. :-)

Re: Editor für BASIC programme mit netten Features...

Verfasst: Sonntag 17. August 2014, 19:36
von jens
Also der Grundstein ist nun gelegt.

Den Editor ist im https://github.com/jedie/DragonPy Projekt. Aber er ist auch einzeln benutzbar.
Der Code ist hier: https://github.com/jedie/DragonPy/blob/ ... /editor.py (Einfach diese Datei starten)

Noch gibt es wenig hilfreiche Funktionen. Mit https://github.com/jedie/DragonPy/commi ... c6233c370a gibt es erstmal eine wichtig Funktion für mich: "RENUM", also das neu nummerieren des BASIC Listings.

Der code zum eigentlichen neu Numerieren steckt in "dragonlib".
An der Stelle: https://github.com/jedie/DragonPy/blob/ ... ic.py#L204

Im Grunde sind es zwei regular expressions:
1. "(?P<no>\d+)(?P<code>.+)"
2. "(?P<statement> GOTO|GOSUB|THEN|ELSE ) (?P<space>\s*) (?P<no>\d+)"

Das ganze läuft in zwei Phasen:
1. dict erstellen, mit alter -> neuer Zeilennummer
2. Alle Zeilennummern ersetzten

Keine Ahnung ob ich alle Fälle wirklich abdecke. Was auf jeden Fall "falsch" gemacht wird: Es werden keine Kommentare oder String ausgelassen. Also hier würde auch neue Nummern gesetzt:

Code: Alles auswählen

10 ' GOTO 10 im Kommentar
20 PRINT "GOTO 20 im String"
Kann man sicherlich auch recht einfach Lösen, aber wozu die Mühe?

Was als nächstes Nett wäre: VARIABLEN hervorheben. Am besten halt nur die wichtigen ersten zwei Buchstaben. Und Hinweisen, wenn die sich überschneiden, bsp:
10 VAR_A = 1
20 VAR_B = 2

Re: Editor für BASIC programme mit netten Features...

Verfasst: Sonntag 17. August 2014, 20:12
von BlackJack
@jens: Kennt das Basic auch ``ON x GOTO 42,23,4711`` beziehungsweise ``ON x GOSUB 42,23,4711``?

Re: Editor für BASIC programme mit netten Features...

Verfasst: Sonntag 17. August 2014, 21:00
von jens
Stimmt, die beiden gibt es auch noch!

Danke für den Hinweis :-)

Re: Editor für BASIC programme mit netten Features...

Verfasst: Montag 18. August 2014, 19:51
von jens
BlackJack hat geschrieben:@jens: Kennt das Basic auch ``ON x GOTO 42,23,4711`` beziehungsweise ``ON x GOSUB 42,23,4711``?
Das geht nun auch mit https://github.com/jedie/DragonPy/commi ... 1d855b9e97

Aber die Lösung finde ich mehr suboptimal. Mir viel nichts besseres ein.

Ich hätte natürlich statt der zwei regex:

Code: Alles auswählen

        (?P<statement> GOTO|GOSUB|THEN|ELSE ) (?P<space>\s*) (?P<no>\d+)
        |
        (?P<on_goto_statement> ON.+?GOTO|ON.+?GOSUB ) (?P<on_goto_space>\s*) (?P<on_goto_no>[\d*,\s*]+)
nur eine allgemeinere machen können:

Code: Alles auswählen

        (?P<statement> GOTO|GOSUB|THEN|ELSE ) (?P<space>\s*) (?P<no>[\d*,\s*]+)
Würde wahrscheinlich in der Praxis nicht viel ändern. Aber es wird nicht explizit auf "ON..." getestet... :?

Re: Editor für BASIC programme mit netten Features...

Verfasst: Mittwoch 20. August 2014, 17:26
von jens
So, nach den heutigen commits: https://github.com/jedie/DragonPy/compa ... ...ce12148 funktioniert nun das senden/empfangen vom BASIC Listign von Editor<->Emulator richtig.

Sieht dann so aus:
Bild

Wer mal testen will:
~$ git clone https://github.com/jedie/DragonPy.git

# Oder .zip laden: https://github.com/jedie/DragonPy/archive/master.zip

~$ cd DragonPy

# Download ROM files:
~$ ./download_ROMs.sh

# start Dragon 32 ROM:
~$ python2 ./Dragon32_test.py

Re: Editor für BASIC programme mit netten Features...

Verfasst: Donnerstag 28. August 2014, 17:51
von jens
Es gibt ein bisschen was neues:

Bild

Neben dem Aussehen, gibt es nun eine einfaches Syntax highlighting :D
Dazu wird auch die BASIC Zeilennummern extra hervorgehoben, die man als Sprungziel auch benutzt.

Momentan wird nur mit dem einfachen BASIC parser (siehe: http://www.python-forum.de/viewtopic.ph ... 51#p262951 ) zwischen Code, DATA, Strings und Commentaren unterschieden. Und nur diese Unterscheidung wird verschieden eingefärbt.

So richtig schön wird es natürlich erst, wenn der Code noch weiter Aufgebröselt wird...