BENUTZUNG VON BIBLIOTHEKEN IN AMIGABASIC ---------------------------------------- Das Amiga-Basic besitzt viele mächtige Funktionen, aber es reizt doch alle Fähigkeiten des Amiga auszuschöpfen. Durch die Verwendung der vorhandenen Bibliotheken eröffnen sich neue Dimensionen. Lesen Sie wie es funktioniert. Der Amiga benutzt für seine Arbeit viele Bibliotheken (Libraries), die in C oder Assembler geschrieben wurden. In diesen Bibliotheken stehen Funktionen zu einem bestimmten Bereich. So finden Sie auf der Workbench-Diskette im Unterverzeichnis »libs« mehrere Dateien, die die Endung ».library« besitzen. Unter anderem steht hier die Library für die Benutzung verschiedener Zeichensätze (»diskfont.library«). Andere Bibliotheken befinden sich im ROM des Amiga. Bei der Verwendung gibt es allerdings keine Unterschiede. Die darin enthaltenen Funktionen können auch von Basic aus benutzt werden. Leider gestaltet sich die Verwendung der Bibliotheken nicht ganz so einfach. Damit Basic die Routinen verwenden kann, muß es wissen, welche Parameter die Funktion verlangt. Diese Angaben findet man in den Dateien auf der »Extras«-Diskette im Unterverzeichnis »fd1.2« oder »fd1.3«, die die Endung ».fd« (»fd« heißt File Description, also Dateibeschreibung) besitzen. Aber dieses Format kann von Basic nicht benutzt werden. Deshalb muß der Benutzer diese Dateien noch konvertieren. Dazu verwendet man das Basic-Programm »ConvertFD« im Subdirectory »BasicDemos«. Zu der Benutzung des Programms gibt es nicht viel zu sagen, aber ein kleines Problem gibt es doch. Nach dem Starten, wird die Eingabe der zu lesenden ».fd«-Datei gefragt. Hier muß man den Pfad und die Endung ».fd« angeben, zum Beispiel: df1:fd1.2/graphics_lib.fd Auch bei der Angabe der zu erzeugenden Datei muß ein kompletter Pfad und die Endung ».bmap« vorhanden sein. df0:libs/graphics.bmap Die Namen der Dateien müssen dieselben sein wie die der Library-Dateien, bis auf die Endung ».bmap«. Amiga-Basic sucht sie später im aktuellen Verzeichnis oder im Verzeichnis »libs« der Diskette, von der gebootet wurde. Bei manchen Funktionen erfolgt die Ausgabe einer Warnung, da die Routine Parameter in einem Register verlangt, das Amiga-Basic nicht verwenden kann. Nach einiger Wartezeit sind dann die Daten der Funktionen in der Datei enthalten. Daraus kann Basic dann die benötigten Informationen entnehmen. Ein Problem ergibt sich noch, nämlich die Namensgleichheit von Basic-Befehlen und Bibliotheksfunktionen zum Beispiel bei »READ«. Das Programm »ConvertFD« stellt solchen Routinen ein »x« voran. Die Amiga-DOS-Funktion »Read« heißt dann also »xRead«. Ein kleiner Tip noch: Wollen Sie die Namen der Funktionen sehen, ändern Sie eine Kleinigkeit im Programm »ConvertFD«. Vier Zeilen hinter dem Label »GotFunction« fügen Sie folgenden Befehl PRINT token$ Sie werden überrascht sein, wieviele Funktionen zum Beispiel in der Grafikbibliothek enthalten sind. Wohlgemerkt stehen in den ».bmap«-Dateien nicht die Funktionen selbst, sondern nur ihr Offset (also die Stelle an der sie zu finden sind) und die Parameter mit den entsprechenden Registern. Die Routinen selbst stehen in den Dateien mit der Endung ».library« wie oben beschrieben. Nun sind wir endlich soweit, daß wir von Basic aus auf fast alle Library-Routinen zugreifen können. Zunächst muß das Basic aber noch erfahren, welche Funktionen einer Library einen Rückgabewert liefern. Dazu dient der Basic-Befehl »DECLARE FUNCTION«. Der Aufruf sieht prinzipiell so DECLARE FUNCTION Name (Parameterliste) LIBRARY »Name« ist dabei ein gültiger Name einer numerischen Basic-Variable. Die verschiedenen Typen (%,&,! und #) können dabei auch angegeben werden. Es ergeben sich nämlich falsche Werte, falls die Funktion einen doppeltgenauen Fließkommawert zurückgibt und Sie in Basic einen einfachgenauen Integerwert abholen. Dies kann zu großen Schwierigkeiten führen. Funktionen, die keinen Rückgabewert liefern, dürfen NICHT dekleriert werden. Die »Parameterliste« wird zwar von Amiga-Basic ignoriert, aber es ist guter Programmierstil sie anzugeben. Das macht sich dann bezahlt, wenn man sich nicht mehr an die benötigten Parameter erinnert. Ein Beispiel hierfür wäre: DECLARE FUNCTION AllocMem&(Groesse,Anforderungen) LIBRARY Nur noch ein Schritt ist zu tun bis zur Benutzung der Funktion. Der Name der Bibliothek muß noch festgelegt werden. Dazu dient der Befehl »LIBRARY«. Passend zum obigen Beispiel, sieht das so aus: LIBRARY "exec.library" Die Bibliothek wird geladen, sofern sie gefunden wird und der Speicher ausreicht. Andernfalls bekommen Sie die Fehlermeldung »File not found« oder »Out of Memory«. Sie können bis zu fünf Bibliotheken zur gleichen Zeit geöffnet haben, wodurch eine große Zahl von zusätzlichen »Befehlen« erreicht Jetzt endlich steht uns die Funktion zur Verfügung. Der Aufruf sieht so aus wie der eines Basic-Unterprogramms. Das Befehlswort »CALL« vor dem Funktionsnamen kann entfallen. Eine Ausnahme gibt es er auch hier, steht der Aufruf hinter dem Wort »ELSE« muß CALL erscheinen. Dies rührt daher, daß Amiga-Basic sonst ein Label erwartet. Wollen Sie die Funktion benutzen schreiben Sie: zeiger&=AllocMem&(Parameter1,Parameter2) Bei diesem Beispiel wird Speicher belegt. »zeiger&« zeigt bei Erfolg auf den Speicherbereich. Ist das Ergebnis 0, konnte kein Speicher belegt werden. Am Ende Ihres Programms sollten Sie auf keinen Fall vergessen, die geöffneten Bibliotheken wieder zu schließen. Werden diese nämlich nicht von anderen Tasks benützt, gibt das Betriebssystem den Speicherplatz wieder frei. Zum Schließen verwenden Sie den Befehl LIBRARY CLOSE Nun wissen Sie wie man von Amiga-Basic die Bibliotheken benutzen kann und wissen auch, daß auch Probleme auftreten können. Bevor Sie also anfangen, müssen Sie sich die einzelnen Funktionen ansehen. Beherrschen Sie dann die benötigten Funktionen, stehen Ihnen neue Dimensionen in der Basic-Programmierung offen. Viel Spaß mit den Bibliotheken wünscht Ihnen die AMIGA-Redaktion