»Fenster«-Befehle für den C 16
Dieses Programm stellt den im C 16-Basic leider nicht vorhandenen »Window«-Befehl zur Verfügung und macht Schluß mit dem umständlichen Hantieren mit den ESC-Funktionen.
Wer im Befehlssatz des Basic 3.5 nach dem Befehl »Window« sucht, wird nicht fündig. Die groß angekündigte moderne Window-Technik läßt doch zu wünschen übrig. Ein Window, also ein Bildschirmfenster, kann nur mit Hilfe der ESC-Taste definiert werden.
So muß man, um ein Window zu setzen, mit dem Cursor an die linke obere Ecke des gewünschten Bildschirmfensters fahren und die Tasten ESC und T drücken. Die rechte untere Ecke des Fensters wird ebenfalls mit dem Cursor gewählt und mit ESC und B gesetzt. Erst jetzt ist das Fenster definiert.
Im Direktmodus ist dieser Aufwand nicht hinderlich, sondern bringt eher Vorteile, da kein Befehl »WINDOW« am Bildschirm erscheint. Im laufenden Programm ist es jedoch sehr umständlich, ein Fenster zu generieren. Es sind sehr viele PRINT-Anweisungen nötig.
Da die Window-Funktion jedoch in vielen Programmen nützlich ist, lohnt es sich schon, diese Funktion komfortabel als Basic-Befehl zur Verfügung zu haben. Ein kleines Maschinenprogramm macht’s möglich.
Nach Eintippen des DATA-Laders (Listing 1) sollten Sie das Programm als erstes unbedingt abspeichern, da es sich nach Kontrolle der Prüfsumme selbst initialisiert und anschließend der DATA-Lader gelöscht wird.
Haben Sie das Programm abgespeichert, dann können Sie es mit »RUN« starten und haben kurz danach den neuen Basic-Befehl »FENSTER« zur Verfügung.
Der FENSTER-Befehl hat folgendes Format und kann in jedem Basic-Programm verwendet werden:
FENSTER AZ,AS,EZ,ES
Die Parameter haben folgende Bedeutung:
AZ | AnfangsZeile |
AS | AnfangsSpalte |
EZ | EndZeile |
ES | EndSpalte |
Gibt man im Programm beispielsweise die folgende Zeile 10 ein, so wird ein Fenster von Spalte 5 der fünften Zeile bis einschließlich Spalte 35 der 15. Zeile definiert.
10 FENSTER 5,5,35,15
Das Fenster kann durch zweimaliges Drücken der HOME-Taste oder durch Generieren eines neuen Fensters gelöscht werden.
Dem Fenster-Befehl müssen auf jeden Fall vier Parameter folgen. Für die Parameter AZ und EZ sind nur Zahlen zwischen 1 und 25 zulässig. AS und ES dürfen nur zwischen 1 und 40 liegen. Außerdem ist zu beachten, daß AZ auf keinen Fall größer als EZ, und AS nicht größer als ES gewählt wird.
Der Fenster-Befehl darf auch nicht im Direktmodus verwendet werden, aber da ist die normale Vorgehensweise über »ESC« sowieso sinnvoller. Sollten diese Bedingungen nicht beachtet werden, erscheint die Fehlermeldung »SYNTAX ERROR«.
Das Beispielprogramm Fenster-Demo (Listing 2) generiert zufällige Textfenster und füllt diese farbig aus.
Der FENSTER-Befehl verkürzt ein Basic-Programm bei häufiger Anwendung gegenüber der konventionellen Methode über PRINT-Anweisungen ganz erheblich, so daß die vom Maschinenprogramm beanspruchten 255 Byte trotz des mageren C 16-Speichers kaum ins Gewicht fallen dürften.
(Christian Quirin Spitzner/ev)10 rem ********************************* 20 rem * * 30 rem * fenster fuer c 16 & 116 * 40 rem * * 50 rem * christian quirin spitzner * 60 rem * gruberstrasse 53 * 70 rem * 8011 poing * 80 rem * * 90 rem ********************************* 100 : 110 : 120 rem *** speicher begrenzen *** 130 : 140 poke 53,255 : poke 54,62 : poke 55,255 : poke 56,62 : clr 150 : 160 rem *** erklaerung *** 170 : 180 print"{clr}{down}"tab(12)"*** {flon}{red}fenster{flof}{blk} ***" 190 print"{down}{down} format: 200 print"{down} {pur}{rvon}fenster az,as,ez,es{blk} 210 print"{down} az = anfangszeile 220 print" as = anfangsspalte 230 print" ez = endzeile 240 print" es = endspalte 250 print"{down} nicht im direktmodus ! 260 : 270 rem data's einlesen *** 280 : 290 for i=16128 to 16383 300 : read p 310 : z=z+p 320 : poke i,p 330 next i 340 if z <> 30097 then print"{down} {flon}data error{flof}":end 350 : 360 rem *** initialisieren *** 370 : 380 sys 16128 390 : 400 rem *** fenster-befehl aufrufen *** 410 : 420 fenster 4,1,25,40 430 : 440 rem *** basic-loader loeschen *** 450 : 460 new 470 : 480 rem *** data's *** 490 : 500 data 169,024,141,008,003,169,063,141 510 data 009,003,162,000,189,205,063,032 520 data 210,255,232,224,043,208,245,096 530 data 162,000,032,115,004,221,209,063 540 data 208,007,232,224,007,208,243,240 550 data 006,032,121,004,076,217,139,032 560 data 183,251,032,115,004,032,132,157 570 data 142,249,063,032,145,148,032,132 580 data 157,142,250,063,032,145,148,032 590 data 132,157,142,251,063,032,145,148 600 data 032,132,157,142,252,063,174,249 610 data 063,224,000,208,003,076,161,148 620 data 224,024,016,249,174,251,063,224 630 data 026,016,242,236,249,063,048,237 640 data 174,250,063,224,000,240,230,224 650 data 041,016,226,172,252,063,224,041 660 data 016,219,236,250,063,048,214,162 670 data 000,222,249,063,232,224,004,208 680 data 248,173,249,063,133,205,173,250 690 data 063,133,202,169,027,032,210,255 700 data 169,084,032,210,255,173,251,063 710 data 133,205,173,252,063,133,202,169 720 data 027,032,210,255,169,066,032,210 730 data 255,169,019,032,210,255,032,193 740 data 251,032,121,004,076,217,139,000 750 data 000,000,000,000,000,147,013,032 760 data 130,070,069,078,083,084,069,082 770 data 132,032,040,067,041,032,067,072 780 data 082,073,083,084,073,065,078,032 790 data 081,085,073,082,073,078,032,083 800 data 080,073,084,090,078,069,082,013 810 data 013,000,000,000,000,000,000,000
100 rem fenster-demo 110 : 120 color 0,1 : color 4,1 : scnclr 130 : 140 do 150 : az = int(rnd(ti)*12)+1 160 : ez = az*2+1 170 : as = int(rnd(ti)*20)+1 180 : es = as*2 190 : 200 : fenster az,as,ez,es 210 : 220 : print"{clr}"; 230 : color 1,rnd(ti)*15+2,rnd(ti)*8 240 : e = (es-as+1)*(ez-az+1)-1 250 : for i=1 to e 260 : print"{rvon} {rvof}"; 270 : next 280 : print"{left}{rvon}";chr$(148);" {rvof}"; 290 loop