QUICK Ecke Folge 22 von Harald Schönfeld Dies ist nun bereits der fünfte Teil zum Thema: Wie kann man BASIC-Programme in QUICK umschreiben? Im heutigen Teil werde ich noch auf 6 Bereiche eingehen. DATA/READ/RESTORE In BASIC werden häufig Daten in DATA-Zeilen gespeichert, die später als Werte in den Speicher geschrieben werden sollen, oder die auf andere Weise abgearbeitet werden sollen. 10 RESTORE 80 20 FOR I=0 TO 10 30 READ A:POKE 1536+I,A 40 NEXT I ... 80 DATA 76,3,6,76,6,6,76,9,6,104,96 Diese Zeilen schreiben die Daten in den Speicherbereich ab 1536. Auch in QUICK gibt es einen DATA-Befehl, mit dem Unterschied, daß er die Werte automatisch an eine bestimmte Stelle im Speicher kopiert: DATA(1536) +( 76,3,6,76,6,6,76,9,6,96 )+ Als Adresse kann auch eine Variable dienen: DATA(STR) +( 48,49,50,0 )+ So kann ein String mit beliebigen Zeichencodes gefüllt werden. Dieser Ausdruck ersetzt somit das folgende BASIC-Programm: 10 FOR I=1 TO 3 20 READ A: S$(LEN(S$)+1)=STR$(A) 30 NEXT I 40 DATA 48,49,50 Auch andere Anwendungen des DATA-Befehls sollten keine Probleme bereiten. USR-Befehl Dieser dient in BASIC zum Aufruf von Maschinenroutinen. Wurden wie oben Daten nach 1536 kopiert, so kann man die UserSubRoutine mit USR(1536) aufrufen. Das obige Program tut zwar nicht gerade viel, wichtig ist jedoch, daß vor dem Rücksprung mit dem Maschinencode 96 noch ein PLA (104) steht. Jedes, vom BASIC aufgerufene Maschinen-Unterprogramm muß irgendwo dieses PLA enthalten, um die Anzahl der übergebenen Argumente vom Stack zu holen. In QUICK ist das ganz anders! In QUICK werden Maschinenprogramme mit dem CALL-Befehl aufgerufen. Z.B. das obige mit CALL(1536) Dabei muß/darf der Stack aber nicht aufgeräumt werden. Informationen aller Art können auf andere Weise durch Variablen übergeben werden. Deshalb wird es wohl nicht so leicht möglich sein komplexe USR von BASIC nach QUICK umzuschreiben (also solche, die viele Parameter brauchen). Routinen die jedoch nur etwas tun, ohne groß Daten mit dem BASIC auszutauschen, können somit durch entfernen dieses PLA- Befehls in QUICK eingesetzt werden. (Zumindest im Normalfall, und wenn deren Speicherbereich auch in QUICK frei ist). PRINT Ein in BASIC sehr häufig gebrauchter Befehl! Glücklicherweise ist PRINT auch in QUICK ähnlich leistungsfähig. Jedoch gibt es einige Unterschiede. 10 PRINT A lautet in QUICK PRINT (A) Wie immer ist das Argument geklammert. Es sind auch mehere Argumente möglich: 10 PRINT A,B PRINT(A,B) Hier besteht aber schon der erste Unterschied. Das Komma in QUICK bewirkt keinen Tabulator! Normalerweise werden alle einzelnen Parameter des PRINT- Befehls direkt nebeneinander geschrieben. Ausnahme: Nach jeder BYTE- oder WORD-Variable wird ein Leerzeichen eingefügt. Ansonsten dürfen die Variablenarten aber gemischt werden und ein Semikolon am Ende bewirkt wie in BASIC keinen Zeilenvorschub. Natürlich ist es aber auch in QUICK möglich Tabulatoren in einen PRINT- Befehl einzufügen: ARRAY +( TAB(2) )+ ... DATA(TAB) +( 127,0 )+ ... PRINT(A,TAB,B) Der String TAB enthält als einziges Zeichen das Tabulatorzeichen und führt somit beim Printen einen Tabulator aus. Jedoch stehen diese Tabulatoren nicht an der selben Stelle wie die durch ',' bewirkten Tabulatoren. LRPINT Druckt direkt auf den Drucker. Dazu muß im BASIC kein Kanal geöffnet werden. In QUICK gibt es dazu den LPT-Befehl. Dieser druckt jedoch nicht direkt auf den Drucker, sondern immer auf Kanal 5. Dieser muß also vorher entsprechend (für den Drucker) geöffnet werden. BASIC 10 LPRINT "Hallo Drucker" QUICK OPEN(5,8,0,"P:") LPT("Hallo Drucker") PUT 10 PUT #1,10 Schreibt das BYTE mit dem Inhalt 10 auf Kanal 1. In QUICK benutzt man dazu den BPUT-Befehl, und schreibt nur ein BYTE. Allerdings kann man dabei nicht den zu schreibenden Wert, sondern die Adresse, wo der zu schreibende Wert steht angeben: BYTE +( B )+ WORD +( BADR=208 )+ ... BADR=VADR(B) B=10 BPUT(1,1,BADR) GET Hier geht's wie bei PUT. BPUT/BGET des TURBO-BASIC Diese beiden Befehle können direkt in die entsprechenden QUICK-Befehle mit den selben Namen übersetzt werden. Zu beachten ist aber die andere Reihenfolge der Parameter (hä,hä!) TB: BPUT #K,ADR,ANZ QUICK: BPUT (K,ANZ,ADR) Nun bleibt noch ein großes Kapitel, die Stringverarbeitung, offen. Dieses Thema wurde jedoch im QUICKmagazin 5 ausführlich behandelt. Dort wurde auch die STR- Library vorgestellt, die sehr viele Routinen (Suchen, Vergleichen, Ändern) enthält und somit im gewissen Sinn leistungsfähiger als TURBO BASIC ist. Stringvariablenfelder sind ein weiteres Problem in QUICK. Aber auch sie werden im QUICKmagazin 5 ermöglicht. Somit sind wir am Ende dieses Lehrgangs "Wie schreibe ich BASIC-Programme nach QUICK um?" angekommen. Im nächsten Teil folgt dazu allerdings noch ein "praktisches" Beispiel mit BASIC-Programm und QUICK-Programm. Sollten noch Fragen zu diesem Thema offen geblieben sein (und ich nehme an daß dies der Fall ist) dann laßt einfach mal was von Euch bei Ulf oder mir hören. Übrigens bin ich wiedermal auf der Suche nach neuen Themen zum Thema QUICK-Ecke. Sollte also irgendjemand in der großen weiten XL-Welt Ideen oder Fragen zum Thema QUICK haben: Laßt mich davon wissen!