Die hier verwendete Notation ist in einem gesonderten Beitrag zusammengestellt.
Voraussetzung für die Erzeugung einer Bibliothek auf dem HP 49G ist das Vorhandensein eines Verzeichnisses (directory) mit den Objekten (Programmen, Variablen, Funktionen), die in einer Bibliothek enthalten sein sollen.
Als geeignetes Beispiel soll das Programmverzeichnis MUSIK aus dem Beitrag "Musik mit dem HP 49G" dienen. Zur Vorbereitung wird empfohlen, diesen Beitrag zu lesen und das Verzeichnis MUSIK mit den Musikprogrammen auf den HP 49G zu übertragen. Die nachfolgenden Erläuterungen gehen davon aus, daß dieses Verzeichnis MUSIK, so wie es im genannten Beitrag beschrieben ist, auf dem HP 49G des Lesers existiert.
Es wird empfohlen, vorher auch den Beitrag "Die Portspeicher des HP 49G" zu lesen.
Im Gegensatz zum HP 48G hat der HP 49G die Fähigkeit, Bibliotheken selbst zu erzeugen, ohne daß dazu ein anderer Computer erforderlich ist. Der Befehl CRLIB (create library) startet den eingebauten Library Creator. Nähere Erläuterungen folgen weiter unten.
Vorher muß jedoch das in eine Bibliothek umzuwandelnde Verzeichnis "präpariert" werden, damit der Befehl CRLIB die nötigen Angaben bekommt, um eine funktionierende Bibliothek daraus erzeugen zu können. Das Verzeichnis MUSIK wird nun als aktuelles Verzeichnis geöffnet.
Zunächst müssen spezielle Definitionsvariablen im aktuellen Verzeichnis angelegt werden, die die Bibliothek definieren:
Variable Erläuterungen und Hinweise $TITLE Titel der Bibliothek (als String in Anführungszeichen abspeichern).
Hier wird der Name "MUSIK" abgespeichert.$ROMID Diese Variable muß eine Zahl zwischen 769 und 1792 enthalten, die auch LIB-ID genannt wird. Wir speichern die Nummer 1720 (als Erinnerung an Bach's "Wohltemperiertes Klavier".
Achtung!
Es dürfen keine bestehenden Menü-Nummern und keine vorhandenen Bibliotheksnummern gewählt werden (siehe Nummernkonvention)$CONFIG In dieser Variablen steht das "library configuration object", das beim Warmstart ausgeführt wird. Die Zahl 1 (default configuration object) führt den ATTACH mit der in $ROMID gespeicherten LIB-ID durch. Andere Inhalte der Variablen $CONFIG sollten nur genommen werden, wenn man genau weiß, was sie bewirken (evtl. Beiträge dazu in der Newsgroup oder bei www.hpcalc.org lesen).
Sicherheitshalber wird als Inhalt die Zahl 1 gewählt.$VISIBLE Diese Variable muß eine Liste von Variablen des aktuellen Verzeichnisses enthalten, die in der Bibliothek verfügbar sein und im Menü der aufgerufenen Bibliothek erscheinen sollen.
Inhalt siehe unten.$HIDDEN Diese Variable muß eine Liste von Variablen des aktuellen Verzeichnisses enthalten, die in der Bibliothek verfügbar sein, aber im Menü der aufgerufenen Bibliothek nicht erscheinen sollen.
Inhalt siehe unten$VARS Diese Variable muß eine Liste von Variablen des aktuellen Verzeichnisses enthalten, die nicht in die Bibliothek eingebunden werden sollen, weil ihr Inhalt veränderbar bleiben soll.
Inhalt siehe unten$EXTPRG Mit Hilfe dieser Variablen können zu den fest eingebauten Menüs (z.B. APPS, STATS) zusätzliche Befehle hinzugefügt werden, die in einer benutzerdefinierten Bibliothek hinterlegt werden müssen. Nähere Informationen darüber sind in der Newsgroup und über www.hpcalc.org zu bekommen. Deshalb wird hier auf eine nähere Erläuterung verzichtet.
Diese Variable wird nicht verwendet.Nun fehlen noch die Inhalte für $VISIBLE, $HIDDEN und $VARS. Der Befehl VARS erzeugt eine Liste mit allen Variablen des Verzeichnisses MUSIK, wie nachfolgend gezeigt:
{ $VARS $HIDDEN $CONFIG $TITLE $ROMID $VISIBLE INFO GT GTA ELISE HANS TONF INF1 NOTE C0 CS0 D0 DS0 E0 F0 FS0 G0 GS0 A0 B0 H0 C1 CS1 D1 DS1 E1F1 FS1 G1 GS1 A1 B1 H1 C2 CS2 D2 DS2 E2 F2 FS2 G2 GS2 A2 B2 H2 C3 CS3 D3 DS3 E3 F3 FS3 G3 GS3 A3 B3 H3 P }. Aus diesen Liste werden die Inhalte für die genannten Definitionsvariablen ausgewählt. Die grün gekennzeichneten Variablen sind die Definitionsvariablen selbst.
Die Definitionsvariable $VISIBLE
Im Bibliotheksmenü sollen alle Variablen sichtbar sein, die zum Programmieren von Liedern und Musikstücken gebraucht werden.
In $VISIBLE werden alle in schwarzer Schrift gekennzeichneten Variablen aus obigem weißen Kasten ausgewählt, die grün und rot gekennzeichneten werden weggelassen, also
{INFO GTA ELISE HANS TONF C0 CS0 D0 DS0 E0 F0 FS0 G0 GS0 A0 B0 H0 C1 CS1 D1 DS1 E1F1 FS1 G1 GS1 A1 B1 H1 C2 CS2 D2 DS2 E2 F2 FS2 G2 GS2 A2 B2 H2 C3 CS3 D3 DS3 E3 F3 FS3 G3 GS3 A3 B3 H3 P }.
Achtung: Der Inhalt dieser Variablen wird Teil der Bibliothek und ist dann nicht mehr veränderbar. Wenn diese Inhalte geändert werden sollen, dann muß das ursprüngliche Verzeichnis MUSIK geändert und die Bibliothek neu erzeugt werden.
Die Definitionsvariable $HIDDEN
enthält alle Variablen, die zwar mit ihrem Inhalt zur Verfügung stehen müssen, aber im Menü der aufgerufenen Bibliothek nicht sichtbar sein sollen. $HIDDEN bekommt als die oben rot gekennzeichneten Variablen als Inhalt: { INF1 NOTE}.
INF1 enthält den für INFO hinterlegten Inhalt, der nur stören würde, wenn er sichtbar wäre. NOTE enthält die Frequenzen für das Programm TONF.
Achtung: Auch der Inhalt dieser Variablen wird Teil der Bibliothek und ist dann nicht mehr veränderbar. Wenn diese Inhalte geändert werden sollen, dann muß das ursprüngliche Verzeichnis MUSIK geändert und die Bibliothek neu erzeugt werden.
Die Definitionsvariable $VARS
Inhalt: { GT }.
Der Inhalt der Variablen GT soll verändert werden können, deshalb darf sie nicht in die Bibliothek eingebunden werden, sondern muß im aktuellen Verzeichnis vorhanden sein (oben im weißen Kasten blau gekennzeichnet).
Achtung: Alle in $VARS enthaltenen Variablen werden nicht in die Bibliothek übernommen.
Nachdem die Definitionsvariablen angelegt sind und den richtigen Inhalt haben, kann CRLIB aufrufen werden, um die gewünschte Bibliothek auf dem HP 49G zu erzeugen.
Wenn der Befehl CRLIB auf dem HP 49G noch nicht funktioniert, dann muß er erst einmal aktiviert werden. Er ist in der versteckten Entwicklungs-Bibliothek Nr. 256 (built-in library) des HP 49G enthalten, die auch als "Hacker's toolkit" bezeichnet wird. Die Aktivierung (Anbindung) dieser Bibliothek Nr. 256 erfolgt durch 256 ATTACH im RPN-Modus oder ATTACH(256) im algebraischen Modus.
Bitte beachten:
Durch einen Warmstart wird die eingebaute Bibliothek Nr. 256 automatisch wieder abgehängt, also ein DETACH durchgeführt.
Nun wird CRLIB aufgerufen. Nach kurzer Zeit erscheint im Stack die Anzeige: Library 1720: MUSIK
Dies ist das gewünschte Library-Objekt, das in eine beliebige Variable gespeichert werden kann. Hier im aktuellen Verzeichnis wird es in die Variable MLIB gespeichert. Damit ist es vom Stack verschwunden.
Speichern der Bibliothek
Man kann eine Bibliothek als normale Datei in einem beliebigen Verzeichnis unter einem beliebigen Namen (wie hier in MLIB) speichern. Speichert man sie in einem Portspeicher, dann erscheint die sogenannte library ID (LIB-ID = Bibliotheksnummer) als Dateiname. Wenn die Bibliothek aktiviert (angebunden) werden soll, MUSS sie in einem Portspeicher gespeichert sein.
Bibliothek anbinden (aktivieren)
Die Bibliotheken für sich sind allein nicht aktiv. Man muß sie erst aktivieren (anbinden).
Bilbliotheken kann man an jedes Verzeichnis anbinden und dann von dort und von allen darunter liegenden (Unter-)Verzeichnissen aus aufrufen. Üblicherweise bindet man eine Bibliothek aber an das HOME-Verzeichnis an, dann sind deren Programme global (d.h. in allen Verzeichnissen) verfügbar.
Angebunden wird die Bibliothek, indem man ihre Nummer in den Stack stellt und dann aus dem gewünschten Verzeichnis heraus ATTACH aufruft. Hat man die Bibliothek über den Filemanager vom Benutzerspeicher direkt in einen Port verschoben, muß man den Rechner aus- und dann wieder einschalten, um die Bibliothek zum Anbinden freizuschalten, bevor man den Befehl ATTACH ausführt.
Bibliothek abhängen (deaktivieren)
Wieder abgehängt kann eine Bibliothek werden, wenn man in dem Verzeichnis, in dem man sie angebunden hat, die Bibliotheksnummer in den Stack stellt und DETACH aufruft. Mit dem Befehl LIBS kann man feststellen, welche Bibliotheken angebunden sind.
Nähere Erläuterungen über ATTACH, DETACH und LIBS stehen im HP49G Advanced Users Guide.
Aktuelles Arbeitsverzeichnis
Auch wenn man mit einer Bibliothek arbeitet, das Menü aktiviert und Variableninhalte erzeugt, so arbeitet man immer noch im aktuellen Verzeichnis des Benutzerspeichers. Das Bibliotheksmenü ist nur "drübergeblendet" (siehe Erläuterungen dazu im Beitrag "Die Portspeicher des HP 49G".
Um das vorher in MLIB gespeicherte library object wird wieder in den Stack zu stellen, wird die zugeordnete F-Taste gedrückt. Nun erscheint die Stackanzeige: Library 1720: MUSIK.
Nach Eingabe der Nummer des Portspeichers, in den die Bibliothek gespeichert werden soll, also für Port :1: die Portnummer 1 (als Zahl ohne die Doppelpunkte), wird [STO] aktiviert. Der Stackinhalt verschwindet und im Portspeicher :1: ist nun ein Objekt 1720 vorhanden. Das ist die Bibliothek MUSIK.
Diese muß noch "angebunden" werden. Im HOME-Verzeichnis wird eingegeben: 1720 ATTACH, oder es wird ein Warmstart mit [ON]&[C] (= [ON] drücken und festhalten, dann [F3/C] zusätzlich drücken und beide wieder loslassen) durchgeführt.
Nach Aufruf von [rightshift][LIB] erscheint links neben den Portspeichern der Menüpunkt [MUSIK]. Nach Aktivieren erscheint das Menü der Bibliothekl auf dem Bildschirm. Links oben in der Anzeige wird das HOME-Verzeichnis angezeigt: Das heißt, das aktuelle Verzeichnis ist HOME, das Menü der Bibliothek ist nur "drübergeblendet"
Wenn die Bibliothek hergestellt, im Portspeicher abgelegt und angebunden ist, könnte der Inhalt des ursprünglichen Verzeichnisses MUSIK gelöscht werden. Auf die Bibliothek kann aus jedem Verzeichnis zugegriffen werden. Selbstverständlich kann bei Bedarf auch wieder ein spezielles Musikverzeichnis angelegt werden.
Die Befehle, Variablen und Funktionen der angebundenen Bibliotheken erscheinen im Katalog [CAT]. Während die Befehle der eingebauten Bibliotheken sich dort in der Schreibweise von den Originalbefehlen des HP 49G nicht unterscheiden, erscheinen die Befehle der externen an das HOME-Verzeichnis angebundenen (benutzerdefinierten) Bibliotheken in Kursivschrift im Katalog.
Normalerweise sind im Katalog 704 "Commands" enthalten. Kommen die Befehle von internen oder externen Bibliotheken dazu, erhöht sich diese Anzahl. Die eingebaute Bibliothek Nr. 256 hat 35 Befehle, und unsere MUSIK-Bibliothek bringt es auf 55 Eintragungen in [CAT].
Die Operating Tools OT49 (Autor: Herr Prof. Dr. Wolfgang Rautenberg, Freie Universität Berlin)
enthalten eine Sammlung praktischer Befehle für den HP49-Programmierer.OT49 ist auf der Internet-Seite http://www.math.fu-berlin.de/~raut unter "Programs for HP 49" zu finden, dort im FTP-Verzeichnis TOOLS. Es sind mehrere Dateien, die alle mit "OT..." beginnen. Die Beschreibung (in Englisch) ist in der Datei "OT49.txt" zu finden.
Bibliothek erzeugen mit D <-> L
OT49 liegt selbst als Bibliothek vor und enthält einen sehr praktischen Befehl D <--> L zur Umwandlung eines Verzeichnisses in eine Bibliothek.
Alle oben gezeigten Arbeiten übernimmt dieser Befehl D <--> L. Er erzeugt bei der ersten Verwendung die nötigen $-Variablen, die man dann verändern (editieren) kann. Dann wiederholt man den Befehl mit den veränderten Variablen und speichert die endgültige Bibliothek in den Portspeicher.
Bibliothek splitten mit D <-> L
Derselbe Befehl D <-> L kann aber auch dazu benutzt werden, aus einer vorhandenen Bibliothek wieder ein Verzeichnis (Quellverzeichnis genannt) mit den ursprünglichen Programmen herzustellen. Das nennt man "Splitten einer Bibliothek", dies ist ebenso wichtig wie das "Erzeugen". Man kann dadurch eine vorhandene Bibliothek später ergänzen, verändern usw., oder man will aus fremden Bibliotheken einen schönen Befehl herausziehen ohne die ganze Bibliothek zu behalten, usw. Dazu muß man splitten (zerlegen) können. Man stellt die LIB-ID in den Stack und ruft D <--> L auf. Es wird ein Verzeichnis D### erzeugt, wobei ### die LIB-ID darstellt.
Zum Beginn des Beitrags
Zur Übersicht
Copyright © 2002 Otto Praxl
Alle Rechte vorbehalten!