Die beiden PowerShell Skripte

convertBasicLineNrToLabel.ps1
convertBasicLabelToLineNr.ps1

diesen dazu, ein Basicprogramm mit Zeilennummern in eines mit Labeln (und zurück) zu konvertieren.
Neben der einfacherern Bearbeitbarkeit des Programms in einem Texteditor können die Skripte auch in Kombination zum Renumber des Basicprogramms genutzt werden.

Bei den Skripten habdelt es sich um Funktionen in vb.net (.NET Framework 4.x), die über die PowerShell aufgerufen werden und damit auch in einem ext. Programm (wie Notepad++) einsetzbar sind.

Beachtet werden alle Sprungziele, die direkt hinter den Befehlen
GOTO, GOSUB, THEN, RESTORE, ARUN, AUTORUN
angegben sind.
Sprungziele können einzeln oder als kommaseparierte Liste auftreten:
GOTO 120
ON I GOSUB 100, 200, 300

Befehle in Anführungszeichen (PRINT "GOTO 100") werden genauso nicht behandelt wie Sprungziele in Anführungszeichen (GOTO "100").

(1) LineNr-to-Label (convertBasicLineNrToLabel.ps1)

Es werden alle Zeilennummern als Sprungziele gesucht und diese durch ein Label _L<Zeilennummer> ersetzt.
Der Quelltext wird ohne Zeilennummern ausgegeben. Einzig vor die Zeilen, die als Sprungziel genutzt werden,
wir eine neue Zeile, nur bestehend aus dem Laben mit führendem Doppelpunkt eingefügt.
Im Basicprogramm darf nach der Zeilennummer ein Doppelpunkt folgen oder nicht.
Die Zeilennummer muss aber als erstes Zeichen der Zeile beginnen.

Aus

90 REM Dies ist ein Test
100 PRINT "Hallo ";
110 GOTO 100

Wird damit

REM Dies ist ein Test
:_L100
PRINT "Hallo ";
GOTO _L100

Konfiguration:
Das Skript besitzt keine Konfigurierbaren Parameter.

(2) Label-to-LineNr (convertBasicLabelToLineNr.ps1)
Dies führt die Konvertierung zu einem Basicprogrmam mit Zeilennummern durch.
Dabei werden alle Springziele nach den erkannten Befehlen, welche ich auf vorhandene Label beziehen,
durch die neu generierten Zeilennummer ersetzt.

Als Label sind dabei alle Zeichenketten hinter dem : zulässig (Alphanumerisch, Numerisch und Unterstrich), die keinem Basicbefehl entsprechen. Der Anwender muss selber darauf achten, dass er keine Labels nutzt, die identisch zu einem genutzten Variablennamen sind.

Somit wird aus dem obigen Programm:

100: REM Dies ist ein Test
110: PRINT "Hallo ";
120: GOTO 110

Getestet wurden die Skripte mit eigenen Sharp PC-1350/PC-1360 Basic-Programmen und einigen C64 Basic V2.0 Programmen aus dem Internet.

Wer einzig ein Renumber durchführen möchte, lässt Skript (1) und (2) direkt hintereinander laufen.

Konfiguration:
Folgende Parameter sind am Anfang des Skripts änderbar:

# 1. Zeilennummer
$FirstLineNr = 100
# Abstand der Zeilennummern
$StepLineNr = 10
# Ausgabe der Zeilennummern mit ($true) oder ohne ($false) Doppelpunkt 
$AddColonToLineNr = $true
