GEM-Routinen in ST-Basic

Aber kann man diese Routinen ansprechen?

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.

Prinzip des GEM-VDI Aufrufs

Der Aufruf von VDI erfolgt immer nach dem gleichen Prinzip.

WERT1 = num. Wert: 
WERT2 = num. Wert:
GOSUB NAME

Gestaltung der Unterprogramme

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.

Schriftart

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

Schriftgröße

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

Textausgabe

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

Textwinkel

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

Grafikmodus

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
Der Aufruf erfolgt durch:
  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

Grafik

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.

Rechteck


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

Rechteckrund

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

Linienbefehle

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.

Linienstärke

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

Linienmuster

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

Linienendform

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

Bibliotheken

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

Anmerkung

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.

Kombination der einzelnen Routinen

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



Aus: ST-Computer 02 / 1986, Seite 30

Links

Copyright-Bestimmungen: siehe Über diese Seite