Nikolaus Heusler Archiv

Erschienen in 64'er Magazin, Ausgabe unbekannt · Originaldatei: FIND&REP.TXT

Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.

Wer suchet, der findet: Anleitung zum Utility »Find & Replace«

Jedes anständige Textverarbeitungsprogramm bietet eine Funktion, die es gestattet, bestimmte Passagen im Text zu finden und durch anderen Text zu ersetzen, nur der Basic-Editor des C 64 nicht. Dieses Utility implementiert diese so schmerzlich vermißte Funktion.

Nikolaus M. Heusler

Eine Funktion, die Teile des Programmes durch andere vertauscht, wäre vor allem bei der Programmierung nützlich, beispielsweise, wenn es darum geht, eine Variable, die oft im Basicprogramm vorkommt, mit einem anderen Namen zu versehen. Aber vor allem benutzen viele Assembler für den C 64 den Basic-Editor als Editor. Hier ist Find & Replace hilfreich, wenn Sie global im ganzen Quelltext ein Label umbenennen möchten. Dieses ist zum Beispiel notwendig, wenn Sie einen Quelltext nachbearbeiten, der von einem Reassembler erzeugt wurde. Aber auch viele andere Anwendungsgebiete lassen sich finden.
Laden Sie das nur vier Blocks lange Tool mit dem Befehl

LOAD "FIND & REPLACE",8,8

Das Programm ist vollkommen in Maschinensprache verfaßt, dennoch müssen Sie diese Programmiersprache nicht beherrschen, um damit arbeiten zu können. Geben Sie nach Abschluß des Ladevorgangs unbedingt NEW ein, damit alle Zeiger richtiggestellt werden. Der Befehl

SYS 50000

bringt eine Kurzanleitung auf den Schirm. Sie können jetzt das gewünschte Basicprogramm eingeben oder laden. Bei Bedarf wird die Suchroutine mit folgenden beiden Befehlen gestartet:

SYS 50003,SUCHTEXT
SYS 50006,NEUTEXT

Nach der Eingabe des ersten Befehles erscheint READY. Danach geben Sie sofort den zweiten Befehl ein. Danach beginnt die Suche. Je nach Programmlänge dauert es einige Zeit, bis der Vorgang beendet ist. Das Tool zeigt laufend die aktuell bearbeitete Zeilennummer an. Ein Beispiel:

SYS 50003,KLAUS
SYS 50006,NICKI

ersetzt überall im Basicprogramm KLAUS durch NICKI. Die beiden Texte dürfen als Spezialität von Find & Replace unterschiedlich lang sein, etwa können Sie mit

SYS 50003,A$
SYS 50006,TE$

aus der Variablen A$ überall im Programm die Variable TE$ machen. Das Programm wird dabei automatisch verlängert. Auch umgekert:

SYS 50003,PRINTZA;"IST EINE ZAHL"
SYS 50006,PRINTZA"IST EINE ZAHL"

entfernt überall im Programm den unnötigen Strichpunkt. Einige Punkte sind zu beachten:

1. Die beiden SYS-Befehle müssen im Direktmodus in zwei unterschiedlichen Zeilen angegeben werden, es ist nicht erlaubt, sie mit Doppelpunkt getrennt in eine Zeile zu schreiben. Der Doppelpunkt und die Befehle dahinter würden sonst zum Such- bzw. Ersetzbegriff gerechnet werden.

2. Nach dem Komma werden alle Zeichen unverändert gelesen, also werden Leerzeichen nicht überlesen.

3. Es ist nicht erlaubt, SYS 50006 vor SYS 50003 anzuwenden, ein ?PREPARATION ERROR wäre die Folge.

4. Die selbe Fehlermeldung erscheint, wenn Sie SYS 50003 ohne Text schreiben, wenn also sozusagen nach gar nichts gesucht werden soll. Umgekehrt ist es gestattet, etwa mit

SYS 50003,POKE53280,0
SYS 50006,

diesen POKE-Befehl aus dem gesamten Basicprogramm zu löschen. Aus der Zeile

10 POKE2,1:POKE53280,0:A=4

wird dann

10 POKE2,1::A=4

5. Die Token-Wandlung übernimmt, falls eingeschaltet, die Routine. Also sind auch Konstruktionen wie

SYS 50003,SIN
SYS 50006,90-COS

erlaubt. Aus der Formel SIN wird dann überall im Programm die (mathematisch falsche) Alternative 90-COS.
Vorsicht, die Tokenwandlung kann auch zuschlagen, obwohl es gar nicht erwünscht ist. Etwa soll in der Zeile

10 PRINT "GEORG"

der Name »GEORG« durch »CHEF« ersetzt werden. Die Befehlsfolge

SYS 50003,GEORG
SYS 50006,CHEF

bringt nicht das gewünschte Ergebnis, da in GEORG das Befehlswort OR vorkommt, das jedoch innerhalb der Anführungszeichen des PRINT-Befehles im Klartext abgelegt ist. Gegen diese kleine Schwäche helfen zwei Tricks: Entweder setzen Sie auch die Such- bzw. Ersatzbegriffe in Anführungszeichen, dann unterbleibt die Wandlung:

SYS 50003,"GEORG"
SYS 50006,"CHEF"

oder Sie schalten mit dem weiter unten beschriebenen Befehl SYS 50012 die Token-Wandlung einfach ab.

6. Mit Hilfe dieser Routine können Zeilen erzeugt werden, die Sie über die Tastatur niemals eingeben könnten, weil sie etwa länger als 80 Zeichen sind. Beispiel: Aus folgender Zeile

10 &:&:&:&:&:&:&:&:&:&

wird mit Hilfe von

SYS 50003,&
SYS 50006,PRINT"TOLLE SACHE!!"

eine sehr lange Zeile, die aus über 200 Zeichen besteht, aber voll funktionsfähig ist. Vermeiden Sie aber, Zeilen zu erzeugen, die über 255 Zeichen enthalten. Solche Programme sind nicht mehr funktionsfähig. Ebenso sollten Sie darauf achten, daß durch die Verlängerung nicht der für Basicprogramme zur Verfügung stehende Speicherplatz überschritten wird.

Wenn Sie all diese Regeln beachten, wird FIND & REPLACE sicher eine sehr nützliche Hilfe für Sie sein. Zwei weitere SYS-Befehle machen die Anwendung noch komfortabler: Wenn Sie nur den Suchbegriff suchen, nicht aber durch etwas anderes ersetzen möchten, starten Sie die Suchroutine nach SYS 50003 nicht mit SYS 50006, sondern mit SYS 50009 ohne Parameter. Dann werden alle Zeilennummern gelistet, in denen der definierte Suchbegriff vorkommt.

In bestimmten Fällen kann die Tokenwandlung unerwünscht sein. Verwenden Sie dann vor SYS 50003 oder SYS 50006 einfach einen SYS 50012, und die Wandlung wird ein- oder ausgeschaltet (abwechselnd, zur Kontrolle erscheint eine Meldung). Diese Einstellung wirkt dann auf alle folgenden SYS 50003 und SYS 50006. Sie können das auch mischen (in der Praxis ohne Nutzen). Wenn Sie beispielsweise das Token PRINT in einem eingegebenen Basicprogramm durch die Buchstabenfolge P R I N T ersetzen wollen, gehen Sie so vor:

SYS 50012 (so lange eingeben, bis TOKENWANDLUNG EIN erscheint)
SYS 50003,PRINT
SYS 50012 (so lange eingeben, bis TOKENWANDLUNG AUS erscheint)
SYS 50006,PRINT

Natürlich ist in diesem Fall das damit behandelte Basicprogramm danach nicht mehr lauffähig, da der Befehl PRINT nur als Token anerkannt wird, nicht als Buchstabenfolge.
Merke: Sollen Texte ersetzt werden, die im Basicprogramm innerhalb von Anführungszeichen oder hinter DATA stehen, sollte vorher mit SYS 50012 die Wandlung ausgeschaltet werden, sonst ist es ratsam, die Wandlung zu aktivieren.