MAL-Homepage Inhaltsverzeichnis



MAL Dokumentation: Metaformat




Inhalt:

1. EINFÜHRUNG
2. METADIRECTORY
3. ELEMENTARE BEFEHLE
4. VERBUNDE
5. CODESTRINGS
6. KONVERTIERUNG VON POOLS


1. EINFÜHRUNG

Bei der Implementierung des MAL-Systems wurde unter anderem auch berücksichtigt, dass verschiedene Hardware-Plattformen unterschiedliche Binärformate bei der Darstellung von Daten (hauptsächlich der Gleitkommazahlen, aber auch der Integerzahlen und Zeichencodes) haben können. Damit der Datenaustausch zwischen verschiedenen Systemen keinen Mehraufwand bedeutet, wird nun einheitlich (auch zwischen gleichen Systemen) der Datenaustausch in einem maschinenunabhängigen Metaformat vorgenommen. Das Metaformat wird ausschließlich in Dateien (sog. Metadateien) abgelegt.

Die C++-Konvertierungsroutine verläßt sich darauf, daß der Datentyp 'unsigned char' bei allen Compilern ein 8-Bit-Typ ohne Vorzeichen und gewohnter Bitreihenfolge (niederwertigstes Bit rechts) ist.

Realzahlen werden in ein 4-Byte Format übertragen (ein Byte Exponent). Geringfügige Abweichungen in der Genauigkeit (etwa ab der 6-ten Kommastelle) sind desshalb wegen Rundungsfehlern zu erwarten.

Die Metakonvertierung übernimmt auch die Umwandlung der Umlaute und des scharfen ß.

Im Metaformat haben diese Zeichen folgende Oktaläquivalente:

Alle anderen Zeichen mit Dezimaläquivalenten größer 127 oder kleiner 32 (Steuerzeichen) werden nicht umkodiert und sollten daher nicht in Strings vorkommen.

Bei Einführung eines neuen Datentyps in das MAL-System sollte darauf geachtet werden, eine entsprechende Meta-Konvertierung zu implementieren. Die entsprechenden Source-Codes sind in der Datei 'meta.C' (bzw. 'meta.cpp') zu finden.

MAL-Homepage Inhaltsverzeichnis


2. METADIRECTORY

In der Datei 'auto.cpu' ist ein Wort 'metadirectory' definiert, das den Pfad für allgemeine Metadateien festlegt. Obwohl Metadaten in beliebigen Directories abgespeichert werden können, ist dieser Pfad die Voreinstellung für die meisten Meta-Konvertierungen.

Hat man mehrere MAL-Systeme in einem gemeinsamen Netzwerk installiert, so empfiehlt es sich für alle eine gemeinsame Meta-Directory einzurichten. Der Datenaustausch zwischen den Systemen gestaltet sich dann sehr einfach.

Auch der Datentransfer innerhalb eines MAL-Systems (z.B. von einem Folder in einen anderen) wird am Besten über eine Metakonvertierung durchgeführt (mit Submenu / Export und Submenu / Import).

Die Metadirectory ist eine Schmierdirectory. Es gibt kein automatisches Löschen nicht mehr benötigter Dateien. Das muss von Zeit zu Zeit manuell vorgenommen werden.

MAL-Homepage Inhaltsverzeichnis


3. ELEMENTARE BEFEHLE

Eine Metadatei wird mit dem Wort
rewrite angelegt.

Syntax:

dateiname ->

Danach können mit dem Wort >meta einzelne Stackeinträge in die Metadatei gespeichert werden. Bei jedem Aufruf von >meta wird ein neuer Stackeintrag an die bestehende Metadatei angehängt.

Syntax von '>meta':

x dateiname ->

Gelesen wird eine Metadatei mit dem Wort meta>.

Syntax von 'meta>':

dateiname -> x1 .. xN

MAL-Homepage Inhaltsverzeichnis


4. VERBUNDE

Verbunde (auch homogene Verbunde) werden rekursiv durch Übertragung der Einzelkomponenten umgewandelt. D. h. am Zielrechner wird zuerst ein Verbundanfang-Symbol '[' am Stack gelegt, dann folgen die Komponenten und am Schluß wird das Wort ']' ausgeführt. Daher darf ein Verbund im Metaformat nicht mehr Komponenten enthalten, als Einträge am Stack gelegt werden können. Eine Ausnahme bilden komprimierte Realfelder oder Integerfelder. Sie können beliebig viele Komponenten beinhalten.

MAL-Homepage Inhaltsverzeichnis


5. CODESTRINGS

Codestrings werden beim Lesen aus einer Metadatei automatisch ausgeführt (das gilt nicht für Doppelpunktdefinitionen oder Poolverweise).

Will man die Ausführung von Codestrings auf der Zielmaschine vermeiden, so muß man beim Austransfer den Codestring in einen normalen String umwandeln (mit dem Wort
code>) und einen entsprechenden Codestring nachschicken, damit dieser String auf der Zielmaschine wieder in einen Code umgewandelt wird (mit dem Wort >code).

Beispiel:

"meta.dat" rewrite
"vlist" "meta.dat" >meta
">code" >code "meta.dat" >meta

MAL-Homepage Inhaltsverzeichnis


6. KONVERTIERUNG VON POOLS

Das Wort
pool>meta konvertiert einen ganzen Pool auf Metaformat. Die Zieldatei wird dabei automatisch eingerichtet, ein Aufruf von rewrite ist daher nicht erforderlich (bestehende Dateien werden ohne Warnung gelöscht!).

Syntax:

poolname dateiname ->

Zum Einlesen einer derart erstellten Datei dient das Wort meta>pool.

Syntax:

dateiname ->

Der Poolname wird beim Anlegen der Datei mit abgespeichert, daher benötigt meta>pool keine Angabe des Poolnamens.

Die Kombination von pool>meta und meta>pool kann auch verwendet werden, um Pools dicht zu schieben, damit der Speicherplatz von als ´gelöscht´ markierten Einträgen tatsächlich frei gegeben wird. Es empfiehlt sich grundsätzlich, zuvor eine Sicherungskopie der Pooldateien anzulegen, weil die Metakonvertierung abbricht, wenn Ungereimtheiten in den Daten auftreten.

Im Admin-Folder (im Public-Pool, Aufruf durch das Wort admin) kann man Worte mit Bedienoberfläche (export_pool und import_pool) für das Aus- und Eintransferieren eines ganzen Pools finden. Für die Standard-Pools (Public und Private) können die Worte public>meta und meta>public bzw. private>meta und meta>private verwendet werden. Diese Worte legen die Metadaten in den Dateien 'public.met' bzw. 'private.met' in der Metadirectory ab.

MAL-Homepage Inhaltsverzeichnis