VC 20
Tips & Tricks

»PRINT AT« und »RESTORE N«

Die hier vorgestellte kleine Basic-Erweiterung bringt zwei häufig benötigte Funktionen, nämlich die PRINT-Ausgabe an einer wählbaren Bildschirmposition und das Setzen des DATA-Zeigers auf einen bestimmten Datensatz. Zusätzlich ist noch die Möglichkeit gegeben, beliebige Bildschirmzeilen zu löschen.

In vielen Leserbriefen wurde nach einem geeigneten »PRINT AT« gefragt. Da bislang keine optimale Lösung angeboten wurde, habe ich nun einen »PRINT AT-Ersatz« geschrieben. Diese Ersatzroutine arbeitet sehr zuverlässig und ist denkbar einfach anzuwenden. Das 146 Bytes lange Maschinenprogramm enthält außerdem eine Routine, mit der man beliebig viele Bildschirmzeilen löschen kann und eine Erweiterung des Restorebefehls, nämlich »RESTORE N«. Es ist nun möglich, die Data-Zeile, aus der das nächste Statement gelesen werden soll, selbst zu bestimmen, ohne die nichtbenötigten Daten zu überlesen. Der Datazeiger kann zum Beispiel mit »RESTORE 1100« direkt auf Zeile 1100 gestellt werden und beim ersten »READ« wird das erste Statement aus Zeile 1100 gelesen. Beim Umnumerieren eines Programmes mit diesem Befehl ist die Zeilenangabe von Hand zu ändern, da Renumberroutinen diesen Befehl nicht berücksichtigen. Der Restore-Befehl kann nach wie vor auch ohne Angabe einer Zeilennummer verwendet werden.

Für die Bildschirmzeilen-Löschroutine steht ein Kurzbefehl zur Verfügung. Die Syntax ist »£A,B«. In A steht die Nummer der obersten, in B die Nummer der untersten zu löschenden Zeile. Beispiele:

£0,22 löscht den ganzen Bildschirm
£0,0 löscht die oberste Zeile
£4,9 löscht BS-Zeilen 4 bis 9 (5. bis 10. von oben)

Das besondere an dieser Einrichtung ist, daß die Cursorposition dabei nicht verändert wird. Folgt der »£«-Befehl auf eine IF..THEN-Abfrage, so ist vor dem »£«-Befehl ein »:« zu setzen. Wird er vergessen, meldet der Interpreter einen »Syntax Error«. Die Werte von A und B müssen zwischen 0 und 22 liegen.

Auch die PRINT AT-Routine wird mit einem Kurzbefehl aufgerufen. Das Kurzzeichen ist der Klammeraffe (»@«) oder besser das »AT«-Zeichen. Die Syntax lautet: »@, X, Y; Ausdruck«. X steht für waagerecht, Y für senkrecht.

X darf Werte zwischen 0 und 21, Y Werte zwischen 0 und 22 erreichen. Andernfalls wird ein »Illegal Quantity Error« ausgegeben. Für X und Y sind möglich:

  1. Direkte Zahlenangabe
  2. Wertangabe in Form einer Variablen
  3. Eine Formel als Koordinate.

Der Ausdruck kann Text (in Hochkommata eingeschlossen, Strichpunkt kann entfallen) oder eine Stringvariable (Strichpunkt unbedingt erforderlich) sein. Der Nullpunkt der Koordinaten ist die obere, linke Ecke. Einige Beispiele:

@0,0"V C - 2 0"Text beginnt oben links
@X,Y"V C - 2 0"Text erscheint an gegebener Position
@A+B,3+A;A$String A$ wird gedruckt
@0,10;Cursor wird für »Input« positioniert

Auch hier ist bei einer IF…THEN Abfrage zwischen »THEN« und dem »@«-Befehl ein »:« zu setzen.

Das Programm läuft sowohl auf der VC 20-Grundversion als auch mit Erweiterung, nicht jedoch mit der 40-Zeichen-Karte.

Der Basiclader (Listing) lädt das Maschinenprogramm ans Speicherende. Hierzu wird der für Basic zur Verfügung stehende Speicherplatz um 256 Bytes verkürzt. Dies übernimmt Zeile 10. In Zeile 20 wird die Anfangsadresse berechnet und dann das Maschinenprogramm in den Speicher gepoket. Nebenbei wird eine Prüfsumme gebildet. Sollte diese nicht gleich 17442 sein, wird der Programmablauf in Zeile 70 abgebrochen. Ist der Prüfsummencheck OK (dies meldet das Programm), wird das Maschinenprogramm aufgerufen (Zeile 90). Abschließend meldet der VC 20 Interpreter »READ« und die Befehle stehen nun zur Verfügung. Wenn das Maschinenprogramm an einer bestimmten Stelle des Speichers stehen soll, kann dies durch Löschen der Programmzeile 10 und Ändern der Zeile 20 in »20 ES=[ADRESSE]« erreicht werden. Einen geeigneten Platz bietet zum Beispiel die 3KByte-Erweiterung, wenn Block 1 erweitert (8KByte oder 16KByte) ist. Auch der Kassettenpuffer (AB 828) ist verwendbar, jedoch nur bei Diskettenbetrieb empfehlenswert, da das Programm dann bei jeder Kassettenoperation gelöscht wird.

(Jürgen Reinert/ev)
1 rem **********************
2 rem *   print at-ersatz  *
3 rem *      (c) 1983      *
4 rem * by juergen reinert *
5 rem **********************
6 :
7 :
10 poke56,peek(56)-1:clr
20 es=peek(55)+256*peek(56)+2
30 hb=int((es+11)/256)
40 lb=es+11-hb*256
50 fori=0to145:reada:pokei+es,a
60 s=s+a:next
70 ifs<>17442thenprint"{down}data error{down}":end
80 print"{down}ok.{down}"
90 pokees+1,lb:pokees+6,hb:syses:end
100 fori=0to145:reada:next
110 data169,11,141,8,3,169,8
120 data141,9,3,96,169,199,72
130 data169,173,72,32,115,0,240
140 data244,201,140,240,8,201
150 data64,240,38,208,76,234
160 data234,32,115,0,240,26,201
170 data58,240,22,32,138,205
180 data32,247,215,32,19,198
190 data56,165,95,233,1,164
200 data96,176,1,136,76,39,200
210 data76,29,200,32,115,0,32
220 data158,215,224,22,176,24
230 data138,72,32,253,206,32
240 data158,215,104,224,23,176
250 data11,168,24,32,240,255
260 data32,121,0,76,160,202,76
270 data72,210,234,234,234,201
280 data92,240,4,56,76,237,199
290 data32,115,0,32,235,215,224
300 data23,176,232,164,20,192
310 data23,176,226,32,141,234
320 data202,228,20,16,248,76
330 data121,0,0,0,0
PRINT AT und RESTORE N für den VC 20
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →