EINFHRUNG



Toolkit ist ein reines Maschinencodeprogramm,  das besondere Hilfsroutinen fr den

ZX-Spectrum  zur Verfgung stellt und in jede Stelle des Speichers geladen  werden

kann,  so  da auch Besitzer eines erweiterten Computers ihren Ram voll  ausnutzen

knnen. Das Programm enthlt folgende Zusatzbefehle:



1. RENUMBER

2. LSCHEN VON PROGRAMMZEILEN

3. AUSTAUSCHEN ODER VERNDERN VON STRINGS

4. PROGRAMMZEILEN-BLOCKVERSCHIEBEN

5. ANZEIGE ALLER ZUR ZEIT DEFINIERTEN VARIABLEN UND DEREN WERTE

6. ANZEIGE DER LNGE DES PROGRAMMS UND DER VARIABLEN



Toolkit hat eine Lnge von 1450 Bytes,  wobei der Autor bestrebt war,  den grten

Effekt  bei geringstem Speicherplatzbedarf zu erreichen.  Bevor Sie Toolkit laden,

mu  zuerst ein freier Bereich im RAM reserviert werden,  wohin der  Maschinencode

geladen wird. Um die Zahlen zu vereinfachen, schlagen wir vor, fr einen 48k Spec-

trum  den RAMTOP auf 62000 zu setzen und das Programm ab Adresse 63000 einzuladen.

Fr  den  16l Spektrum werden entsprechend die Adressen 29000 und  30000  benutzt.

Diese Werte knnen aber je nach Bedarf gendert werden,  wobei nur darauf geachtet

werden mu,  da der RAMTOP kleiner als die Adresse,  ab der das Programm  geladen

wird, ist und genug Platz fr den Code und Ihr Programm vorhanden ist.



Geben  Sie also CLEAR 62000 (und andere Werte entsprechend fr einen 16k Spectrum)

ein,  um den RAMTOP zu setzen,  gefolgt von LOAD "" CODE 63000,1450. 63000 ist die

Anfangsadresse von Toolkit und 1450 die Lnge des Programms in bytes.



SYNTAX



Toolkit bentigt eine einzige BASIC - Zeile,  um die Routinen  anzusteuern.  Diese

Programmzeile hat die Form  9999 REM,  gefolgt von den Instruktionen, die je durch

ein  Leerzeichen  getrennt werden.  Die Eingabe der Befehle wird in den  folgenden

Beispielen behandelt.



RENUMBER



Die Funktion RENUMBER ist, wenn nichts weiter festgelegt wurde, vorgegeben und hat

vorgegebene  Werte,  d.h.,  da,  wenn sich hinter der REM-Zeile nichts  befindet,

Toolkit  nach Aufruf Ihr gesamtes Programm beginnend ab Zeile 10 mit  Schrittweite

10 neunumeriert. Um die RENUMBER - Funktion mit ihren ganzen Mglichkeiten zu nut-

zen, knnen Sie noch folgende Parameter spezifizieren:



ST = Anfangszeile (Start)

NS = Neue Anfangszeile (New Start)

NI = Neues Intervall oder Schrittweite

SP = Letzte Zeile (Stop)



Geben Sie nun folgendes Beispielprogramm ein:



1 RUN     2 GO TO 6     3 LIST     4 RETURN     5 REM     6 GOSUB 3     9999 REM



Nun  knnen  Sie die RENUMBER-Routine aufrufen;  da Toolkit in  Maschinencode  ge-

schrieben ist,  benutzen wir dazu die USR - Funktion,  also:  RANDOMIZE USR  nnnnn

oder  LET X=USR nnnnn.  PRINT USR nnnnn zeigt zustzlich  noch eine ntzliche Zahl

auf den Bildschirm an (Erklrungen dazu folgen).



Starten Sie also jetzt RENUMBER mit PRINT USR 63000 (30000 oder nnnnn),  was  nach

der korrekten Ausfhrung die Anzeige von 9999 zur Folge hat.  Das Programm ist nun

ab  Zeile 10 mit dem Intervall 10 neu numeriert worden.  Es folgen nun die Parame-

ter, mit denen RENUMBER detailliertere Funktionen ausfhren kann.



9999 REM ST          - Numeriert ab Programmzeile ST (s.o.). Ihr Programm mit neu-

                       er Anfangszeile (NS) 10 und Schrittweite (NI) 10 bis  Zeile

                       9999  (SP)  neu.  (NS kann auch fr eine  Programmblockver-

                       scheibung benutzt werden, die spter beschrieben wird.)



9999  REM  ST  NS    - Numeriert ab ST mit neuer Anfangszeile (NS) und dem  Inter-

                       vall (NI) 10 bis Zeile 9999 (SP) neu.



9999 REM ST NS NI    - Numeriert  ab ST beginnend ab NS mit NI bis Zeile 9999 (SP)

                       neu.



9999 REM ST NS NI SP - Numeriert  ab ST bis SP eingeschlossen mit neuer NS mit  NI

                       neu.



Versuchen Sie jetzt mit Ihrem neunumerierten Programm (letztes Beispiel) eine Neu-

numerierung ab einer neuen Zeile 100 mit der Schrittweite 2.  Geben Sie dazu  9999

REM  10  100 2 60  ein.  Die funktion wird dann von Zeile 10 bis 60 mit neuer  An-

fangszeile  100 und dem Intervall 2 ausgefhrt,  nachdem PRINT USR nnnnn (die  An-

fangsadresse nnnnn wird ja von Ihnen wie schon beschrieben festgelegt)  eingegeben

wurde.



Fr  RENUMBER  gelten folgende Bedingungen:  Wenn Sie eine Anfangszeile (ST) defi-

nieren, die nicht existiert, beginnt Toolkit mit der nchstfolgenden. Dasselbe be-

zieht  sich  auf eine nicht vorhandene Endzeilennummer (SP).  Falls  neunumerierte

Zeilennummern sich mit anderen berschneiden oder falls hnliche Fehler  entstehen

wrden, wird Toolkit dies mit einer Fehlermeldung quittieren, so da Sie bei Expe-

rimenten nichts falsch machen knnen.  Auerdem werden alle direkten GOTO,  GOSUB,

LLIST,  RUN,  LIST und RESTORE Anweisungen des entsprechenden Programmgebiets auch

neunumeriert.



BLOCKVERSCHIEBUNG



Mit  der  letzten voll spezifizierten RENUMBER - Anweisung knnen auch ganze  Pro-

grammbereicht verschoben werden,  was fr eine Reorganisation von  z.B.  Unterpro-

grammen sehr ntzlich ist. Dabei sollten Sie sorgfltig auf das Zielgebiet achten,

da  die Blockverschiebung nicht auf schon belegte Bereiche angewandt werden  kann.

Die  Parameter  erhalten jetzt folgende (zu den vorhergehenden nicht  sehr  unter-

schiedliche) Bedeutungen:  ST ist der Blockanfang,  NS der Anfang des Zielgebiets,

NI das Intervall,  mit dem die Programmzeilen in das Zielgebiet eingebracht werden

und  SP das (alte) Blockende.  Das ganze Verfahren stellt eigentlich kein  Problem

dat;  Sie werden aber eine Fehlermeldung bekommen,  wenn Sie versuchen, einen Pro-

grammblock an eine Stelle zu schieben,  wo nicht gengend Platz vorhanden ist. Zur

Zusammenfassung:



9999 REM BLOCKANFANG ZIELGEBIET INTERVALL BLOCKENDE schiebt einen Block von BLOCK-

ANFANG bis BLOCKENDE zum ZIELGEBIET mit einem neuen INTERVALL.



LSCHEN



Das Format dieser Anweisung unterscheidet sich nicht sehr von der  vorhergehenden;

zustzlich  wird  nur als erste Anweisung hinter dem REM - Befehl ein kleines  "e"

eingegeben. Die zwei Parameter sind hier ST = Anfangszeile, ab der gelscht werden

soll  und SP = Endzeile,  bis zu der gelscht werden soll.  ST und SP  sind  dabei

eingeschlossen.



9999 REM e 10 20



lscht Zeile 10 bis 20 einschlielich.  Falls SP oder ST nicht existiert, betrifft

der  Lschvorgang die darauffolgende Programmzeile.  9999 REM e hat die Fehlermel-

dung INVALID ARGUMENT zur Folge.



AUSTAUSCH VON STRINGS



Diese  Routine kann einen String,  der sich berall im Programm oder in bestimmten

Programmzeilen befindet,  durch einen anderen ersetzen. Die Austauschanweisung ist

"c"  (Kleinbuchstabe) gefolgt von den beiden Strings,  wobei der erste  durch  den

zweiten ersetzt wird.  Zustzlich knnen ST und SP festgelegt werden, um nur einen

String  in einem bestimmten Gebiet zu ersetzen.  Ein String-Austausch im  gesamten

Programm wird folgendermaen erreicht:



9999 REM c STRING1 STRING2



Weiterhin knnen Sie auch einen Stringaustausch ab ST bekommen, und zwar durch:



9999 REM c ST STRING1 STRING2



Ein Stringaustausch zwischen ST und SP erreichen Sie durch



9999 REM c ST SP STRING1 STRING2



ST  und  SP  sind jeweils im Austausch eingeschlossen,  falls  ein  entsprechender

String in diesem Zeilen vorhanden ist. Da die beiden Strings durch ein Leerzeichen

getrennt sind,  darf der erste String kein Leerzeichen und auch nur Zeichen, deren

Code ber 32 liegt,  enthlten.  Der zweite String kann jeden Code (auch Kontroll-

zeichen) beinhalten.  Funktionen,  die normalerweise im K-Modus eingegeben werden,

knnen unter Verwendung des Statements THEN, das nachher gelscht wird, eingegeben

werden. Zahlen knnen zwar im Listing gendert werden, intern bleibt aber der vor-

herige Wert erhalten. Wenn Sie  PRINT USR nnnn  als Programmzeile verwenden, haben

Sie  dadurch einen schnellen Editor fr lngere Programme,  wenn Sie Variable oder

Werte durchsehen wollen; dieses Verfahren wird spter noch beschrieben.



ANZEIGE DER VARIABLEN UND DEREN WERTE



Durch diese Routine werden alle z.Z.  definierten Variablen und deren Werte  ange-

zeigt.  Durch "d" wird die Funktion aufgerugfen;  dazu knnen noch zwei  Parameter

festgelegt werden,  die sich auf die Anzahl der Elemente eines numerischen und al-

phanumerischen Feldes,  die angezeigt werden sollen,  beziehen. Der gesamte Befehl

hat die Form:



9999 REM d N1 N2



N1  ist die Anzahl der anzuzeigenden Elemente eines numerischen Feldes und N2  die

Anzahl der Elemente eines alphanumerischen oder String-Feldes.  Alle Programmvari-

ablen werden angezeigt; wenn Sie nicht an den Feldern interessiert sind, geben Sie

nur   9999 REM d 1 1  ein,  woraufhin die Anzeige entsprechend minimalisiert wird.

9999 REM d  zeigt die ersten 10 Elemente der numerischen Felder,  bis zu 9999 Ele-

mente der alphanumerischen Felder und natrlich alle anderen Variablen  an.  Durch

weitere  Festlegung  von N1 knnen Sie selbstverstndlich die Anzahl der  Elemente

der numerischen Felder erhhen.



Eine weitere Mglichkeit ist, die PRINT USR nnnn Anweisung als Programmzeile, z.B.

in  einer FOR NEXT Schleife einzugeben,  was eine Anzeige der Variablen  jedesmal,

wenn  die Zeile vom Programm abgearbeitet wird,  zur Folge hat.  Weiterhin  knnen

Sie,  wenn die Anzeige mehr als eine Bildschirmseite fllt, die Systemvariable SCR

CT verndern (POKE 23672,255),  um einen automatischen Scroll mit der  Programmge-

schwindigkeit von Toolkit zu erhalten.



SPEICHERPLATZBEDARF VON PROGRAMM UND VARIABLEN



Sie knnen sich die Lange des Programms plus Variable durch



9999 REM p



anzeigen  lassen.  Dieser Befehl hat nur ein Format und zeigt praktisch immer  den

Bedarf  vom Programm und der Variablen an.  Durch CLEAR erhalten Sie nur die Lnge

des Programms (alles in Bytes).



ZUSAMMENFASSUNG



Die einfachste Methode,  um die Toolkit-Routinen aufzurufen,  ist,  die  PRINT USR

nnnnn  Anweisung in Zeile 9997 zu setzen. In Verbindung mit 9998 LIST knnen auto-

matisch  eventuelle  nderungen durchgesehen werden;  dabei erscheint  hinter  der

letzten z.B. durch RENUMBER genderten GOSUB Funktion ein blinkender Kursor.



Die  zustzlich bei PRINT USR nnnnn angezeigte Zahl hngt von der jeweilig in  der

9999 REM Anweisung festgelegten Funktion ab.



Es wird demnach angezeigt:



- bei RENUMBER die nchste nicht genderte  Programmzeilennummer

- bei  der Programmblockverschiebung die Anzahl der Bytes,  die verschoben  worden

  sing.

- bei  dem  Stringaustausch  die nchste nicht mehr bearbeitete  (ob  festgelegter

  String vorhanden oder nicht) Programmzeilennummer.

- bei der Anzeige der Variablen der Wert 128 (Dimension des Variablenbereichs).

- beim  Lschen von Programmzeilen die nchste noch vorhandene  Programmzeilennum-

  mer.



Nun zu den Fehlermeldungen:  Falls Toolkit irgendetwas,  was hinter der  REM-Zeile

steht,  nicht verstehen kann, erscheint die Meldung INVALID ARGUMENT. Wenn die Pa-

rameter  nicht verarbeitet werden knnen,  erscheint PARAMETER ERROR.  Eine OUT OF

MEMORY  ERROR  Mitteilung bekommen Sie unter anderem,  wenn  Sie  versuchen,  eine

Blockverschiebung  durchzufhren,  wenn nicht mehr gengend Speicherplatz fr  die

Zwischenspeicherung  des Blocks vorhanden ist.  Reduzieren Sie dann den  Programm-

block.



Wir  sind sicher,  da Toolkit Ihnen beim Programmieren in BASIC eine groe  Hilfe

sein wird und wnschen Ihnen viel Erfolg.



                             Ihr Team von  PROFISOFT