home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
programming
/
patchcompiler
/
anleitung
< prev
next >
Wrap
Text File
|
1991-01-16
|
9KB
|
202 lines
PatchStarCompiler V1.00
Copyright 1990 Roger Fischlin
Steigerwaldweg 6
6450 Hanau 7
Deutschland
Dieses Programm ist FREEWARE, d.h. das Urheberrecht liegt beim
Autor !
Die Weitergabe ist nur erlaubt wenn :
1. der Name des Autors und der Copyright-Vermerk nicht entfernt
wurden,
2. die Weitergabe unentgeldlich ist bzw. nur die DIREKTEN
Kosten erhoben werden.
Patchen, d.h. das gezielte manipulieren einiger Bytes eines Files, ist
in Mode gekommen. Überlicherweise benötigen Sie zum Patchen einen File-
Editor (z.B. "NewZap","FileMaster"). Deshalb entstand die Idee, eine
einfache , PASCAL-ähnliche Programmiersprache speziell für Patch-
Programme zu entwickeln. Diese Programme können dann mit dem PatchStar-
Compiler in ein im CLI ausführbares Programm übersetzt werden.
PatchStar-Spache
Die Spache umfaßt nur wenige Befehle:
TEXT, PATCH, CHECK, IF TRUE, IF FALSE, BEGIN, END, EXIT
Allgemein achtet der Compiler weder auf Groß- und Kleinschreibung,
ferner können beliebig viele Leerzeichen und Tabs zur besseren Über-
sichtlichkeit eingefügt werden. Jede Zeile kann mit einem vorange-
stellten "*"- oder ";"-Zeichen als Kommentarzeile genutzt werden,
außerdem kann mit einen ";"-Zeichen am Zeilenende nach dem Befehle eine
Bemerkung im Quellcode hinzugefügt werden.
TEXT : TEXT entspricht der PASCAL-Anweisung "WriteLn".Der in An-
führungszeichen eingeschlossen Text wird im CLI-Fenster aus-
gegeben, anschließend springt der Cursor in die nächste
Zeile.
Beispiele : TEXT "Programm gepatcht."
TEXT 'Falsche Programmversion !'
PATCH : PATCH ist der zentrale Befehl zum Patchen. Nach dem Befehls-
wort folgt die Adresse (in dezimaler, hexadezimaler [$],
binärer [%] oder oktaler [@] Schreibweise). Nach mindestens
einem Leerzeichen folgenden dann die zu patchenden Byte-
Werte in hexadezimaler Form. Zur besseren Übersichtlichkeit
kann nach der Patch-Adresse ebenfalls ein Doppelpunkt einge-
fügt werden. Falls Sie jedoch einen String patchen möchten,
so wird dieser statt der einzelnen Bytes in Anführungs-
zeichen gestzt. Das Mischen von Byte- und String-Angaben ist
nicht möglich !
Da PATCH der zentrale Befehl ist, kann das Befehlswort auch
entfallen und man beginnt direkt mit der Patch-Adresse.
Beispiele : PATCH $0000 : "256"
PATCH 50 ff ff ff ea
PATCH %110 '200'
123456 $4a $99 $5a
@00 $349afb
CHECK : CHECK dient zum Überprüfen von Bytes der zu patchenden
Datei. Dies mag sinnvoll sein, wenn der Patch z.B. mehrere
Programmversionen bearbeiten kann. Aber auch eine Abfrage,ob
es sich um die richtige Version handelt, kann vor falsch ge-
patchten Files bewahren. Der Befehl hat die gleiche Syntax
wie PATCH, das Befehlswort darf aber nicht entfallen, da der
Compiler die Anweisung sonst als einen PATCH-Befehl inter-
pretiert. Das Ergebnis der Abfrage kann anschließend mit
Hilfe der IF-Anweisung (siehe unten) ausgewertet werden.
Beispiele : CHECK $0000 : "256"
CHECK 50 ff ff ff ea
CHECK %110 '200'
BEGIN : Mit BEGIN und END werden, wie in Pascal, mehrere Programm-
END zeilen zusammengefaßt. Dies ist nach einer IF-Abfrage (siehe
unten) nötig, damit der Compiler weiß, welche Befehle der
Computer ausführen soll, und welche wer gegebenenfalls über-
springen soll.
IF FALSE : Mit beiden IF-Befehlen wird das Ergebnis der CHECK-Anweisung
IF TRUE verarbeitet. Die nach "IF FALSE" folgenden Befehle werden
ausgeführt, wenn die CHECK-Überprüfung negativ (falsch) war,
die sich an "IF TRUE" anschließenden Anweisungen werden aus-
geführt, falls die Überprüfung positiv (wahr) war. Die nach
der IF-Anweisung auszuführenden Befehle müssen, auch wenn es
sich nur um einen Befehl handelt, innerhalb einer BEGIN-END-
Anweisung stehen.
Der IF-Befehl bezieht sich immer auf die zuletzt ausgeführte
CHECK-Anweisung ! Innerhalb der BEGIN-END-Anweisung können
weitere IF-Abfragen vorkommen.
Beispiel : CHECK $132 : "256"
IF TRUE
BEGIN
TEXT "PAL-Version !"
END
IF FALSE
BEGIN
PATCH $132 : "256"
TEXT "NTSC- auf PAL-Version gepatcht!"
END
EXIT : Trifft der Computer auf eine EXIT-Anweisung, beendet er die
Ausführung des Patches vorzeitig.
Beispiel : CHECK $4656 : "1.3"
IF FALSE
BEGIN
TEXT "Leider falsche Programmversion!"
EXIT
END
Beispielprogramm
; ED Patch taken from FileMaster
check $1aad : "199" ; check if it's the right version !
if true ; yes, now patch window size
begin
Patch $1aad : "255"
Text "ED 1.4 will now open PAL window."
end
if false ; no, it's a different version of ED !
begin
Text "Sorry, wrong version of ED !"
end
Patch erzeugen
Erstellen Sie den Quellcode in der oben beschriebenen Sprache in einem
ASCII-Editor (z.B. ED) und speichern Sie die Datei ab.Erzeugen Sie eine
zweite Datei, deren Inhalt beim Aufruf des Programmes mit einem "?"
ausgeben wird. Rufen Sie dann im CLI den PatchStarCompiler auf:
1> PatchStarCompiler <Info-Datei> <Quellcode> <Name des Patches>
Der Compiler generiert in mehren Schritten aus den Dateien das reine
Patch-Programm und speichert es unter dem Namen, der als dritter
Parameter übergeben wurde.
27. Oktober 1990 Roger Fischlin