Sind sie nur auf komplizierten Wegen nutzbar oder bleiben sie demjenigen, der weniger tief in die Rechnermaterie Einblick nehmen will, verschlossen?
Nun, beim ATARI ST können diese Fragen positiv beantwortet werden. Sie sind in jeder Programmiersprache nutzbar, falls diese eine GEM-Schnittstelle eingebaut hat oder zumindest über eine Möglichkeit zum Aufruf von Assemblerprogrammen verfügt.
Dazu gehören momentan:
Sinngemäß findet man in der Sprache C, und in artverwandten Sprachen die angenehmste Art der GEM-Programmierung. Dies ist darauf zurückzuführen, daß GEM in C geschrieben ist, und was sollte einfacher sein als ein Programm der gleichen Sprache aufzurufen. Dies geschieht durch namentlichen Aufruf der Routine mit Übergabe der benötigten Parameter.
Prozedurname (x,y,z,...) oder Ergebnis: = Funktionsname (x,y,z,...)
Da jede Routine über einen eigenen Namen verfügt, ist der Funktionsaufruf besonders übersichtlich, wobei in C auf diese Art und Weise alle GEM-Routinen in ein eigenes Programm eingebaut werden können. Andere höhere Programmiersprachen bieten ähnliche Möglichkeiten. Natürlich ist GEM auch in Assembler ansprechbar. Dies erreicht man durch Angabe einer fest zugeordneten Funktionsnummer und einen anschließenden speziellen Assemblerbefehl, wobei die Lage der angesprochenen Routine im Speicher, wie bei manch anderem Betriebssystem, keine Rolle spielt.
Auch in Basic ist die Einbeziehung von GEM vorgesehen, zwar nicht so komfortabel wie in C, aber immerhin möglich. Die Handhabung ist ähnlich wie in Assembler gestaltet. Es stehen hier vordefinierte Speicherzellen zur Verfügung, in denen die benötigten Befehlsparameter übergeben werden.
Bedeutung der Speicherzellen bzw. Datenfelder
Eingabe:
CONTRL Befehlsnummer CONTRL+2 Anzahl der Eingabekoordinaten des PTSIN-Feldes CONTRL+6 Anzahl der Eingabedaten im INTIN-Feld INTIN Eingabefeld (Farbe, Schriftart, ...) PTSIN Eingabefeld von Datenpaaren (z. B. Eckpunkte von Rechtecken)
Ausgabe:
CONTRL+4 Anzahl der Ausgabekoordinaten CONTRL+8 Anzahl der Ausgabedaten INTOUT Ausgabefeld (z. B. momentaner Schrifttyp) PTSOUT Auseabefeld von Datenpaaren (Eckpunkte eines Buchstabens)
Sämtliche Speicherzellen sind 16-Bit breit, was bei der Adressberechnung berücksichtigt werden muß. Das bedeutet, daß eine Datenzelle ’CONTRL +1’ nicht existiert. Falls die Bitbreite der Befehle PEEK und POKE abgeändert wurde, sollte durch ’DEF SEG = 0’ während der Bearbeitung der GEM-Routine die Bitbreite wieder auf 16-Bit eingestellt werden.
Tabelle 1 : Bedeutung der Variablen
Durch die Basicbefehle GEMSYS und VDISYS erfolgt der Funktionsaufruf von AES- und VDI-Routinen. In diesem Artikel soll näher auf die VDI-Routinen eingegangen werden, da diese von Basic aus wesentlich einfacher zu handhaben sind.
Einige dieser Routinen sind schon als Basicbefehle eingebaut. Es sind die grafischen Grundfunktionen wie zum Beispiel das Ziehen von Linien, das Zeichnen von Ellipsen oder Teilkreisen sowie das Ausfüllen von Flächen. Allerdings sind einige leistungsstarke grafische Möglichkeiten des Rechners dabei verloren gegangen. Diese doch recht einfach realisierbare Funktionen kann man aber leicht durch Unterprogramme ersetzen.
Der Aufruf von VDI erfolgt immer nach dem gleichen Prinzip.
WERT1 = num. Wert: WERT2 = num. Wert: GOSUB NAME
Sämtliche Basicunterprogramme sind so gestaltet, daß man sie nach Bedarf an jedes beliebige Programm anhängen (MERGEN) kann. Es ist daher empfehlenswert die Zeilennummern zu übernehmen.
Der ATARI ST verfügt über verschiedene Textdarstellungsformen. Dazu gehören Fettschrift, Kursivschrift, Hohlschrift, unterstrichene und helle Schrift oder beliebige Kombinationen. Dabei schalten Bit 0 bis Bit 4 der ’SCHRIFTTYP’-Variablen die schiedenen Schriftarten.
BIT | Wert | Schriftart |
0 | 1 | Fettschrift |
1 | 2 | Helle Schrift |
2 | 4 | Kursivschrift |
3 | 8 | Unterstrichen |
4 | 16 | Hohlschrift |
Durch Kombination kommt man schon auf 32 verschiedene Schriftarten bei denen allerdings einige schlecht lesbar sind.
Der Aufruf erfolgt durch:
SCHRIFTTYP = ...: Gosub SCHRIFTART (0 < = SCHRIFTTYP, < = 32)
Eine Auswahl der verschiedenen Schriftarten zeigt Bild 1 (dazugehörend Listing 1).
Der normale Schriftsatz wird wieder eingeschaltet durch:
SCHRIFTTYP = 0 : Gosub SCHRIFTART 65000 SCHRIFTART: 65002 ' --> SCHRIFTTYP 65004 ' 0 = Normal 1 = Fett 2 = Hell 65006 ' 4 = Kursiv 8 = Unterst. 16 = Hohl 65008 ' oder Kombinationen 65010 ' 65012 poke contrl ,106 65014 poke contrl+2,0 65016 poke contrl+6,1 65018 poke intin ,schrifttyp 65020 vdisys 65022 return
Routine Schriftart
5 ' merge "SCHRIFTART.bas" 9 ' 10 fullw 2: clearw 2 20 data 1,2,4,8,16,3,5,9,10,12,0 30 for a=0 to 10 40 read SCHRIFTTYP 50 gosub SCHRIFTART 60 gotoxy 14,a+4: print "Schriftprobe1 70 next 80 warte=inp(2) 90 end
Listing 1: verschiedene Schriftarten
Ebenso kann man die Größe der Schrift verändern (Bild 2). Die Schriftgrößen reichen hierbei von Kleinstschrift, wie man sie in den Diskettensymbolen findet, bis zu äußerst großer Schrift, deren Ausmaße ein Vielfaches der Normalschrift einnehmen.
Der Aufruf erfolgt durch:
GROESSE = ... : gosub SCHRIFTGROESSE
Dabei ist zu beachten, daß einige Schriftgrößen nicht mehr mit dem PRINT-Befehl ausgegeben werden können, da sich sonst die einzelnen Buchstaben bei großer Schrift überschneiden .und-bei kleiner Schrift ein zu großer Zwischenraum zwischen den Buchstaben entsteht. Vermeiden kann man dies durch Ausgabe des „Textes mit einer weiteren VDI-Routine (Siehe Routine ’Textausgabe’).
Bei dieser Routine ist darauf zu achten, daß die Schriftgröße nach Programmablauf wieder auf Normalgröße zurückgeschaltet wird, da es sonst zu Schwierigkeiten bei der Programmeditierung kommt.
Dies geschieht durch:
GROESSE = 10 : gosub SCHRIFTGROESSE 65030 SCHRIFTGROESSE: 65032 ' --> GROESSE 65034 ' <9 sehr klein 9 klein 65036 ' 10-15 normal 16-17 gross 65038 ' 16-17 gross 18-19 groesser 65040 ' 65042 poke contrl ,107 65044 poke contrl+2,0 65046 poke contrl+6,1 65048 poke int in ,groesse 65050 vdisys 65052 return
Routine Schriftgröße
5 ' merge "SCHRIFTGROESSE.bas" 6 ' merge "TEXTAUSGABE.bas" 9 10 fullw 2:clearw 2 20 data 8,9,10,16,18,20 30 for a=l to 6 40 read groesse 50 gosub schriftgroesse 60 xpos=220:ypos=80+a*30:text$="ST-Computer" 70 gosub textausgabe 80 next 90 groesse=10 : gosub schriftgroesse 100 warte=inp(2) 110 end
Listing 2: verfügbare Schriftgrößen
Diese Routinen gibt einen String maßstabsgerecht auf dem Bildschirm aus. Dabei wird auch Großschrift und Kleinschrift korrekt dargestellt. Bei dem Aufruf muß der auszugebende Text in ’TEXT$’ geschrieben werden und die Position der Ausgabestelle in die Variablen ’XPOS’ und ’YPOS’.
XPOS = ... : YPOS = ... : TEXT$ = "......": gosub TEXTAUSGABE
Die Ausgabeposition ist frei wählbar und nicht wie bei ’PRINT’ zeilen- und spaltengebunden.
65060 TEXTAUSGABE: 65062 > --> TEXT* J XPOS; YPOS 65064 ' masstabsgerechte Textausgabe 65066 for i=0 to len(text$)-l 65068 poke intin+i*2,asc(mid$(text$,i+1,l)) 65070 next 65072 poke intin+i*2,0 65074 poke contrl,8 65076 poke contrl+2,1 65078 poke contrl+6,len(text$)+,1 65080 poke ptsin , xpos+1 65082 poke ptsin+2,ypos+38 65084 vdisys 65086 return 65088 '-----------------------------------
Routine Textausgabe
Als weiteren Leckerbissen kann man die Ausgaberichtung der Schrift verändern (Bild 3 und Listing 3). Leider erfolgt dies nicht kontinuierlich sondern nur in 90 Grad Schritten. Anwendung findet beispielsweise die dadurch erreichbare senkrechte Textausgabe bei der Beschriftung von Koordinatensystemen oder bei der Bemaßung von Zeichnungen.
Aufruf durch:
WINKEL = ...: gosub TEXTWINKEL (Winkel = 0 ; 900 ; 1800 ; 2700)
Die Routine arbeitet nur mit der GEM-Textausgabe zusammen, da der normale PRINT-Befehl dafür nicht ausgelegt ist. Wie schon bei den vorhergehenden Routinen ist auch hier darauf zu achten, daß man vor Beendigung des Programmes den Winkel wieder normalisiert.
Dies erfolgt durch:
WINKEL = 0 : gosub TEXTWINKEL 65100 TEXTWINKEL: 65102 ' --> WINKEL 65104 ' (0 ; 900 l 1800 ; 2700 ) 65106 poke contrl ,13 65108 poke contrl+2,0 65110 poke contrl+6,1 65112 poke intin,Winkel 65114 vdisys 65116 return 65118 ' ------------------
Routine Textwinkel
5 ' merge "TEXTWINKEL.bas" 6 ' merge "TEXTAUSGABE.bäs" 9 ' 10 fullw 2:clearw 2 20 for winkel =2700 to 0 Step -900 30 gosub textwinkel 40 xpos =300:ypos=150:text$="-->ATARI ST" 50 gosub textausgabe 60 next 70 warte = inp(2) 80 end
Listing 3
Diese Funktion gibt den Schreibmodus an, der bei allen grafischen Operationen von Bedeutung ist. Hiermit wird festgelegt, ob der Bildschirm überschrieben wird oder nach einer anderen bestimmten logischen Anweisung verknüpft wird. Es entstehen auf diese Art und Weise vier verschiedene Möglichkeiten der Bildschirmausgabe:
Modus | Bedeutung | 1 | Überschrieben | 2 | Mischen | 3 | XOR | 4 | Mischen, Revers |
MODUS = 1...4 : Gosub GRAFIKMODUS
Modus 1 ist der Schreibmodus, der normalerweise bei allen Bildschirmausgaben in Erscheinung tritt. Der Hintergrund wird hierbei grundsätzlich gelöscht.
In Modus 2 werden die Bildschirmausgaben mit dem schon vorhandenen Hintergrund gemischt. Dies ist vor allem bei Beschriftungen von Grafiken interessant, da im normalen Schreibmodus hinter jedem Schriftzeichen eine leere Box entsteht.
Eine exclusive Oder-Verknüpfung erreicht man durch Modus 3. Ein Bildschirmpunkt wird hierbei nur dann gesetzt, wenn eines der beiden Bits (Hintergrundbit oder Objektbit) eine Eins enthält. Der betreffende Bildschirmpunkt wird gelöscht, wenn beide Bits Nullen oder beide Bits Einsen enthalten.
Der letzte mögliche Modus ist Modus 4. Bei ihm erfolgt die Bildschirmausgabe wie bei Modus 2, jedoch mit zusätzlicher Invertierung. Damit kann z. B. Reversschrift ausgegeben werden:
MODUS = 4 : Gosub GRAFIKMODUS
Bild 4 zeigt die verschiedenen Wirkungen des ’Grafikmodus’-Befehls auf unterschiedlichen Hintergründen.
5 ' merge "GRAFIKMODUS.bas" 9 ' 10 fullw 2:clearw 2 20 linef 100,100,400,100 30 linef 100,100,100,300 40 linef 100,300,400,300 50 linef 200,100,200,300 60 linef 400,100,400,300 70 linef 300,100,300,300 80 color 1,1,1,2,2 : fill 110,110 90 color 1,1,1,6,2 : fill 210,110 100 color 1,1,1,8,2 : fill 310,110 110 for MODUS =4 to 1 step-1 120 gosub GRAFIKMODUS 130 gotoxy 9, 6 + modus*2 140 print chr$<14> chr$(15); 150 print " S T - C O M P U T E R "; 160 print chr$(14) chr$(15) 170 next 180 warte=inp(2) 190 end
Listing 4: Grafikmodi
65130 GRAFIKMODUS: 65132 ' --> MODUS 65134 ' 1 = ueberschreiben 2 = mischen 65136 ' 3 = XOR-verknuepfen 4 = revers,mischen 65138 poke contrl ,32 65140 poke contrl+2,0 65142 poke contrl+6,1 65144 poke intin ,modus 65146 vdisys 65148 return 65150 '-------------------------------------------
Routine Grafikmodus
Im VDI sind alle nur denkbaren Grafikfunkionen enthalten, die bestimmte geometrische Elementarfiguren auf den Bildschirm zeichnen.
Einige dieser Funktionen sind direkt im Basic verfügbar, andere sind allerdings nur über GEM Aufrufe erreichbar. Die interessanten, bzw. die am meisten benötigten Routinen sind hier angegeben.
Bild 5
Leider vermißt man im Basic einen Befehl zum Zeichnen von Rechtecken. Diesen kann man zwar mit vier LINE-Befehlen umgehen, aber einfacher und schneller ist die spezielle VDI-Routine des GEM hierfür. Damit kann man das Rechteck zusätzlich mit einem vorgewählten Füllmuster ausfüllen lassen, was wesentlich schneller ausgeführt wird, als mit dem FILL-Befehl (Bild 5 und Listing 5).
Zum Aufruf genügt die Angabe der Koordinaten von zwei gegenüberliegenden Eckpunkten. Die Reihenfolge der Eckkoordinaten ist dabei völlig beliebig. Es ist also nicht erforderlich immer die linke obere Ecke und anschließend die rechte untere Ecke anzugeben. Die Funktion verlangt lediglich zwei Punkte die an einer Diagonalen des Rechteckes liegen.
Der Aufruf erfolgt durch:
XPOS1 = XPOS2 = YPOS1 = YPOS2 = Gosub RECHTECK
Bei dieser Routine, wie auch bei allen anderen GEM-Routinen, die etwas auf den Bildschirm ausgeben, sollte man darauf achten, daß das OUTPUT-Fenster in voller Größe geöffnet ist, denn anders wie bei dem Print-Befehl erfolgt die Ausgabe bei VDI-Befehlen direkt auf den Bildschirm, d. h. in die Fenster, die sich gerade auf dem Bildschirm befinden.
Die Koordinatenumrechnung ist erforderlich weil sich der normale Koordinatenursprung des Basic-Koordinatensystems wegen des Output-Fensters unterscheiden... .Die Abweichung beträgt in X-Richtung 1 Pixel und in Y-Richtung 38 Pixels. Der Angleich wurde vorgenommen damit man problemlos VDI- und normale Basicroutinen kombinieren kann.
64000 RECHTECK: 64002 ' --> XPOS1 ; YPOS1 ; XPOS2 ; YPOS2 64004 poke contrl ,11 64006 poke contrl+2 ,2 64008 poke contrl+6 ,0 64010 poke contrl+10,1 64012 poke ptsin ,XPOS1 +1 64014 poke ptsin+2,YPOS1 +38 64016 poke ptsin+4,XPOS2 +1 64018 poke ptsin+6,YPOS2 +38 64020 vdisys 64022 return 64024 '---------------------------------
Routine Rechteck
5 ' merge "RECKTECK.bas" 9 ' 10 fullw 2:clearw 2 20 color 1,1,1,9,2 30 xpos1 = 100:ypos1 = 100:xpos2=300:ypos2 = 300 40 gosub rechteck 50 color 1,1,1,9,3 60 xposl=150:ypos1=150:xpos2=230:ypos2=260 70 gosub rechteck 80 warte =inp(2) 90 end
Listing 5: Rechtecke, eckig
Rechteck abgerundet
Dieser Befehl zeichnet ebenso wie in der vorherigen Routine ein Rechteck. Dieses Rechteck aber besitzt abgerundete Ecken (Bild 5a rechts). Man muß wieder nur die Koordinaten von zwei diagonal gegenüberliegenden Eckpunkten eingeben, die Gestaltung der ’runden Ecken’ übernimmt die VDI-Routine.
Es wird hier von GEM eine Routine bereitgestellt, die beispielsweise zum Umrahmen von Bildern oder von Texten geeignet ist.
Das Unterprogramm bietet zwei Möglichkeiten: Entweder nur ein Rechteck zu malen oder gleichzeitig die vom Rechteck eingeschlossene Fläche auszufüllen.
Der Aufruf erfolgt durch:
XPOS1 = ... : YPOS1 = .. XPOS2 = ... : YPOS2 = .. FUELL = ... : gosub RECHTECKRUND
Die Variable FUELL gibt an ob ein Rechteckrahmen oder ein ausgefülltes Rechteck gezeichnet werden soll. Dabei wird bei ’FUELL = 0’ ein Rahmen gemalt und bei ’FUELL < > 0’ ein ausgefülltes Rechteck. Die Füllfarbe bzw. das Füllmuster muß vorher mit dem COLOR-Befehl definiert werden.
64030 RECHTECKRUND: 64032 ' --> XPOS1 ; VPOS1 ; XPOS2 ; YPOS2 64034 ' --> FUELL ' (0 ODER O 0) 64036 poke contrl ,11 64038 poke contrl+2,2 64040 poke contrl+6,0 64042 if fuell = 0 then poke contrl+10,8 else poke contrl+10,9 64044 poke ptsin ,XPOS1 +1 64046 poke ptsin+2,YPOS1 +38 64048 poke ptsin+4,XPOS2 +1 64050 poke ptsin+6,YPOS2 +38 64052 vdisys 64054 return 64056 '---------------------------------
Routine Rechteckrund
5 ' merge "RECHTECK.bas" 6 ' merge "RECHTECKRUND.bas" 9 10 color 1,1,1,5,2 15 fullw 2:clearw 2 20 xpos1=100:ypos1=100:xpos2=300:ypos2=300 30 gosub rechteck 40 xposl=200:ypos1=80:xpos2=400:ypos2=200 50 FUELL=1 60 color 1,1,1,22,2 70 gosub rechteckrund 80 warte =inp(2) 90 end
Listing 5 a: Rechtecke
Eine weitere Besonderheit des GEM-VDI ist die Veränderbarkeit der Linien. Dazu gehören:
Alle Grafikoperationen benutzen sehr feine, durchgehende Linien. Eine Änderung dieser Attribute ist im ST-Basic nicht vorgesehen. GEM-VDI bietet da einige Möglichkeiten, die bei der einen oder anderen Anwendung sehr nütz-, lieh sein können.
Dabei gelten diese Routinen nicht nur für Geraden sondern auch für Ellipsen und Rechtecke.
Diese Routine gibt an mit welcher Stärke eine Linie auf dem Bildschirm abgebildet wird (Bild 6). Damit ist eine Hervorhebung bestimmter Kurven oder grafischen Figuren möglich.
Die Routine wird wie folgt aufgerufen:
STAERKE= ... : Gosub LINIENSTAERKE ’STAERKE = (1,3,5,7,...)’
Zur Normalisierung der Linienstärke wird die Routine mit ’STAERKE = 1’ aufgerufen.
64220 LINIENSTAERKE: 64222 ' --> STAERKE 64224 poke contrl ,16 64226 poke contrl+2,1 64228 poke contrl+6,0 64230 poke ptsin, staerke 64232 poke ptsin+2, 0 64234 vdisys 64236 return 64238 '------------------
Routine Linienstärke
5 ' merge "LINIENSTAERKE.bas" 9 ' 10 fullw 2: clearw 2 20 for staerke = 37 to 1 Step -4 30 gosub linienstaerke 40 x=20+staerke*15 50 linef x,100,x,300 60 next 70 warte = inp(2) 80 end
Listing 6: verschiedenen Linienstärken
Mit Hilfe dieser Routine kann man einstellen ob eine Linie mit gepunkteter, gestrichelter oder anderer Linienform gezeichnet wird (Bild 7). Insgesamt stehen sechs Linientypen und ein frei definierbarer Typ zur Verfügung. Die vordefinierten Typen und die entsprechenden Werte zum Programmaufruf sind in der folgenden Tabelle dargestellt.
Typ Bitmuster (16-Bit) 1 1111111111111111 2 1111111111110000 3 1111000011100000 4 1111111000111000 5 1111111100000000 6 1111000110011000 7 frei definiertes Muster
Diese Muster eignen sich beispielsweise zum Darstellen von Hilfslinien in Diagrammen oder verdeckten Linien in dreidimensionalen Körpern. Auch zum gleichzeitigen Darstellen mehrerer Kurven sind verschiedene Linientypen, zumindest auf einem monochromen Monitor, unverzichtbar. Der Aufruf erfolgt durch:
LINIENTYP = ... : Gosub LINIENMUSTER
Zum Wiederherstellen der normalen geschlossenen Linienform ruft man die Routine mit ’Linienmuster = 1’ auf.
64240 LINIENMUSTER: 64242 ' —> LINIENTYP 64244 ' 1-7 64246 poke contrl ,15 64248 poke contrl+2,0 64250 poke contrl+6,l 64252 POKE INTIN, linientyp 64254 vdisys 64256 return 64258 '--------------------
Routine Linienmuster
5 ' merge "LINIENMUSTER.bas" 9 10 fullw 2:clearw 2 20 for linetyp = 1 to 7 30 gosub linienmuster 40 y=60 +20*1inetyp 50 linef 50,y,550,y 52 z=20 +70*1inetyp 55 circle z,250,30 60 next 70 warte =inp(2) 80 end
Listing 7: Linienmuster
Normalerweise sehen alle Linien am Anfang und Ende eckig aus. Dies ist natürlich auch angebracht. Mit dieser Routine allerdings kann man dieses Aussehen verändern. Es stehen zwei zusätzliche Endformen zur Verfügung, wobei Anfangs- und Endform getrennt definiert werden.
Aufruf durch:
ANFANGSFORM ENDFORM = ... : Gosub LINIENENDFORM
Die Pfeilform ist hierbei sehr gut zur Bemaßung einzusetzen oder zum Darstellen von Vektoren. Die Wirkung dieser Routine zeigt Bild (8). Kombiniert wurde dieses Programm mit den Routinen ’LINIENSTAERKE’ und ’GRAFIKMODUS’.
64200 LINIENENDFORM: 64201 ' --> ANFANGSFORM J ENDFORM 64202 poke contrl ,108 64204 poke contrl+2,1 64206 poke contrl+6,0 64208 poke intin, Anfangsform 64210 poke intin+2, Endform 64212 vdisys 64214 return 64216 '--------------------------
Routine Linienendform
5 'merge "LINIENENDFORM.bas" 6 'merge "LINIENSTAERKE.bas" 9 10 fullw 2: clearw 2 20 anfangsform=2 : endform=l :gosub linienendform 30 for staerke = 21 to 1 step -4 40 gosub linienstaerke 50 y=20+staerke*12 60 linef 400,y,100,y 70 next 80 warte = inp(2) 90 end
Listing 8: Einbahnstraße
Die jeweils benötigten Unterprogramme können nach Bedarf zu einem Hauptprogramm zugeladen werden. Dies geschieht durch einfaches ’MERGE „PROGRAMMNAME.BAS“’. Wenn mehrere Routinen benötigt werden kann dies manchmal etwas lästig werden. Deshalb sollte man sich Unterprogrammbibliotheken anlegen, die nach Aufgabe und Wirkung gegliedert sind. So wäre eine TEXTBIBLIOTHEK und eine GRAFIKBIBLIOTHEK empfehlenswert, mit folgendem Inhalt:
Textbibliothek
: Schriftart
: Schriftgröße
: Textausgabe
: Textwinkel
: Grafikmodus
Grafikbibliothek
: Rechteck
: Rechteckrund
: Linienmuster
: Linienendform
: Linienstärke
Bei eventuell fehlerhaftem Aufruf von VDI-Routinen kann es vorkommen, daß das Basic auch auf einen anschließenden korrekten Aufruf nicht mehr richtig reagiert. Wenn sich also zum Beispiel die Schriftart nicht mehr umschalten lassen sollte, hilft meistens ein QUIT mit anschließendem Neustart des Basics. Das öftere Zwischenspeichern von Programmen ist deshalb auch hier empfehlenswert.
Die VDI-Routinen können wie alle normalen Basicbefehle auch kombiniert werden. So kann man dicke Geraden mit abgerundeten Enden als auch große Kursivschrift erzeugen. Die angegebenen Beispielprogramme sollen eine Anregung zum Eigenexperiment sein, wobei diese ’neuen Basicbefehle’ sicher in so manchem Programm ihre Anwendung finden werden. Ein Beispiel, in dem von einigen Routinen Gebrauch gemacht wird, zeigt Bild 9 (Listing 9).
Fortsetzung im nächsten Heft.
5 ' merge "LINIENSTAERKE.bas" 6 ' merge "LINIENENDFORM.bas" 7 ' merge "LINIENMUSTER.bas" 8 ' merge "SCHRIFTART.bas" 9 100 ' BEMASSUNG EINES RECHTECKES 110 fullw 2: clearw 2 120 staerke =3 : gosub linienstaerke 130 xposl=100 :ypos1=200: xpos2=300 :ypos2=240 140 gosub rechteckrund 150 staerke =1 : gosub linienstaerke 160 linientyp=4 : gosub linienmuster 170 linef 80,220,320,220 180 linientyp=l : gosub linienmuster 190 linef 100,230,100,280 200 linef 300,230,300,280 210 linef 295,240,340,240 220 linef 295,200,340,200 230 endform =l:anfangsform=l :gosub linienendform 240 linef 330,200,330,240 250 linef 100,270,300,270 255 endform =0:anfangsform=0 tgosub linienendform 260 schrifttyp = 4: gosub Schriftart 270 gotoxy 11,16 : print"200 mm" 280 gotoxy 20,12 : print"40 mm" 290 schrifttyp= 0: gosub Schriftart 300 warte=inp(2) 310 end
Listing 9: Zeichnung