Diese Dokumentation sowie das gesamte Programmpaket drfen im Rahmen der
“GNU General Public License”
kopiert, verndert und weitergegeben werden solange diese
Copyright-Notiz und diese Erlaubnis unverndert auf allen Kopien enthalten
ist und die
“GNU General Public License” der Free Software Foundation (in der Datei
COPYING
) mitkopiert und weitergegeben wird.
Es wird keine Garantie gegeben, da die Programme, die in dieser Dokumentation beschrieben werden, 100%ig zuverlssig sind. Sie benutzen diese Programme auf eigene Gefahr. Der Autor kann auf keinen Fall fr irgendwelche Schden verantwortlich gemacht werden, die durch die Anwendung dieser Programme entstehen.
\input texinfo
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Seit der Workbench 2.1 bietet der Amiga ein sehr schnes System an, mit
dem Programme in verschiedenen, praktisch beliebigen Sprachen benutzt
werden knnen: Die locale.library
. (Man nennt diesen Vorgang
Lokalisierung
, daher der Name.)
Die Idee ist eigentlich recht simpel: Man whlt eine Sprache, meist die
englische aus und schreibt sein Programm ganz normal, abgesehen davon,
da Strings nicht mehr direkt eingegeben werden, sondern ber einen
Funktionsaufruf im Programm verwendet werden. Durch einen weiteren
Funktionsaufruf zu Beginn des Programms erhlt der Benutzer nun die
Mglichkeit, anstelle der vorgegebenen Strings andere zu whlen, die in
einer externen Datei, einem sogenannten Katalog
enthalten sind.
Diese Katalogdateien sind vom Programm unabhngig. Mchte man das Programm in einer weiteren Sprache betreiben, so ist lediglich eine neue Katalogdatei zu erzeugen, das eigentliche Programm mu nicht gendert werden.
Auf den Programmierer kommen dadurch aber zustzliche Aufgaben hinzu: Es mssen die Kataloge erzeugt werden, die Strings nach wie vor eingegeben werden und es mu zustzlicher Code erzeugt werden, der die Behandlung der Kataloge bernimmt. Dies soll durch FlexCat so weit wie mglich vereinfacht und automatisiert werden, ohne dabei auf Flexibilitt (vor allem in Bezug auf den erzeugten Quelltext) zu verzichten. Mit FlexCat geht das Ganze folgendermaen vor sich:
Katalogbeschreibungsdatei
.
Die Beschreibung enthlt neben den Strings z.B. Angaben ber minimale
und maximale Lnge. See section Aufbau einer Katalogbeschreibungsdatei.
Quelltextbeschreibungsdatei
wird aus
der Katalogbeschreibung Quelltext erzeugt: Die Quelltextbeschreibung
ist praktisch eine Vorlage, in der FlexCat gewisse Symbole durch
vorgegebene Werte, z.B. die Strings aus der Katalogbeschreibung
ersetzt. Da die Quelltextbeschreibungsdatei mit einem Editor
bearbeitet werden kann, kann der Quelltext an beliebige
Programmiersprachen und fr beliebige Anforderungen angepat werden.
Gewisse Vorlagen (in Assembler, Oberon und C, letzteres wahlweise
mit Lokalisierung unter 2.0 oder erst ab 2.1) sind bereits vorhanden.
Sie knnen entweder als Beispiele dienen oder einfach verwendet werden,
ohne sich ber den erzeugten Quelltext den Kopf zu zerbrechen.
See section Aufbau einer Quelltextbeschreibungsdatei.
Katalogber\-setzungs\-datei
erzeugen. Diese hnelt der
Katalogbeschreibungsdatei, enthlt aber fr jeden String eine leere
Zeile. In diese mssen nun die entsprechenden Strings in der neuen
Sprache eingetragen werden. Damit dies mglichst einfach geht, folgen
auf die leeren Zeilen jeweils Kommentarzeilen, die die ursprnglichen
Strings enthalten. Es ist dadurch immer klar, welcher String wo
einzusetzen ist. Aus der Katalogbeschreibungs- und der
-bersetzungsdatei kann FlexCat dann anschlieend einen Katalog
erzeugen. (Dieser Vorgang kann zu beliebiger Zeit erfolgen, auch wenn
das Programm lngst fertig ist.) See section Aufbau einer Katalogbersetzungsdatei.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
FlexCat ist in Ansi-C geschrieben und sollte daher auf jedem Amiga und
nach evtl. Neucompilierung sogar auf jedem anderen Rechner laufen.
Das gilt ebenso fr die erzeugten Programme, denn FlexCat ist mit sich selbst
erzeugt worden. Die mitgelieferten Quelltextbeschreibungen sollten
Programme erzeugen, die auf jedem Amiga und sogar auf beliebigen Rechnern
lauffhig sind. (Allerdings sollte man dann beim Aufruf der
FlexCat-Funktionen sicherstellen, da die Variable LocaleBase den Wert
NULL hat. Lokalisierung ist aber meist nur auf dem Amiga und ab der
Workbench 2.1 mglich, da erst dann die locale.library
zur Verfgung
steht.
Es ist aber prinzipiell durchaus mglich, auch unter einer frheren
Workbench oder gar auf anderen Rechnern Lokalisierung anzubieten: Ein
Beispiel dafr liefern die Quelltextbeschreibungsdateien ‘C_c_V20.sd’
und ‘C_h_V20.sd’, in denen die locale.library
durch die
iffparse.library
ersetzt wird, falls letztere vorhanden ist, erstere
dagegen nicht. Damit ist Lokalisierung schon ab der Workbench 2.0 mglich.
See section FlexCat-Quelltext in C-Programmen.
Zur Installation ist nichts weiter zu tun, als das eigentliche Programm an eine sinnvolle Stelle Ihres Suchpfades zu kopieren und einen geeigneten Platz fr die Quelltextbeschreibungen auszuwhlen. Falls Sie mit einer anderen als der englischen Sprache arbeiten wollen, mssen Sie auerdem den entsprechenden Katalog an eine geeignete Stelle kopieren. Im Falle der deutschen Sprache (die derzeit die einzige verfgbare ist) wre die Datei ‘Catalogs/Deutsch/FlexCat.catalog’. Der einfachste Platz ist das Verzeichnis ‘Locale:Catalogs/Deutsch’, mglich ist aber auch, einfach das ganze Verzeichnis ‘Catalogs’ in das Directory des Programms zu kopieren. See section Einbau des erzeugten Quelltextes in eigene Pro\-gram\-me.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
FlexCat arbeitet nur vom CLI aus. Die Aufrufsyntax ist
FlexCat CDFILE/a,CTFILE,CATALOG/k,NEWCTFILE/k,SOURCES/m
Dies ist die Bedeutung der Argumente:
ist der Name einer zu lesenden Katalogbeschreibungsdatei. Diesen anzugeben ist obligatorisch. Aus diesem Argument wird auch der Basisname bei der Quelltextbeschreibung gewonnen. Achten Sie deshalb auf Gro-/Kleinschreibung! See section Aufbau einer Quelltextbeschreibungsdatei.
ist der Name einer zu lesenden fr die Erzeugung von Katalogen zu lesenden Katalogbersetzungsdatei. Auerdem kann man eine vorhandene Katalogbersetzungsdatei mit Hilfe des Argumentes NEWCTFILE auf den neuesten Stand zu bringen: Wird beides angegeben, so wird zunchst die Katalogbeschreib\-ungs- und dann die -bersetzungsdatei gelesen und anschlieend eine neue Katalogbersetzungsdatei erzeugt, die dieselben Strings wie die alte und evtl. neue Strings (als Leerzeile) enthlt.
ist der Name eines zu erzeugenden Kataloges. Dieses Argument ist nur gemeinsam mit der Verwendung CTFILE erlaubt.
ist der Name einer neu zu erzeugenden Katalogbersetzungsdatei. Wie schon gesagt, werden die Strings aus einer evtl. durch CTFILE angegebenen bestehenden Datei bernommen. Fehlt das Argument CTFILE, so wird eine Datei erzeugt, die nur Leerzeilen als Strings enthlt.
sind die Namen zu erzeugender Quelltextdateien sowie der dazu zu lesenden Quelltextbeschreibungsdateien. Diese Argumente mssen die Form ‘source=template’ haben, wobei ‘source’ der Name der zu erzeugenden Quelltextdatei und ‘template’ der Name der Quelltextbeschreibungsdatei ist.
Ein Beispiel:
‘FlexCat Prog.cd NEWCTFILE NewCatalog.ct prog_cat.c=C_c_V21.sd’
liest die Katalogbeschreibungsdatei ‘Prog.cd’ und erzeugt daraus die Katalogbersetzungsdatei ‘NewCatalog.ct’ sowie den Quelltext ‘prog_cat.c’. Letzterer entspricht der Quelltextbeschreibungsdatei ‘C_c_V21.sd’. Der Basisname in der Quelltextbeschreibung ist ‘Prog’.(Beachten Sie die Groschreibung!)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Eine Katalogbeschreibungsdatei enthlt vier Arten von Zeilen.
Jede mit einem Semikolon beginnende Zeile ist eine Kommentarzeile, wird also von FlexCat ignoriert. (Eine Ausnahme sind die unten beschriebenen Stringzeilen, die sehr wohl mit einem Semikolon beginnen drfen.)
Mit einem ’#’ beginnende Zeilen enthalten ein Kommando. Mgliche Kommandos sind (Gro-/Kleinschreibung wird ignoriert):
#language <str>
gibt die Vorgabesprache des Programms an, d.h. die Sprache der Strings in der Katalogbeschreibungsdatei. Vorgabe ist ‘#language english’.
#version <num>
gibt die Versionsnummer der zu erffnenden Kataloge an. Im Unterschied zu
Exec.OpenLibrary
mu die Nummer genau stimmen, hhere Nummern werden
nicht akzeptiert. Eine Ausnahme ist es, hier die 0 als Versionsnummer
anzugeben, durch die jeder Katalog akzeptiert wird. Vorgabe ist
‘#version 0’. Zu diesen Befehlen siehe auch Locale.OpenCatalog
.
#lengthbytes <num>
Weist das Programm an, vor jeden String die angegebene Zahl von Bytes zu schreiben, die die Lnge des Strings (ohne die lengthbytes) enthalten und ohne abschlieendes NUL-Byte angeben. (Ein NUL-Byte wird in Katalogen aber trotzdem angehngt, im erzeugten Quelltext ist dies von der Quelltextbeschreibungsdatei abhngig.) ‘<num>’ mu <= sizeof(long), d.h. <= 4 sein. Vorgabe ist ‘#lengthbytes 0’.
#basename <str>
Setzt den Basisnamen fr die Quelltextbeschreibung. Der aus den Argumenten beim Aufruf des Programmnamens gewonnene Basisname (see section Aufruf des Programms) wird berschrieben. See section Aufbau einer Quelltextbeschreibungsdatei.
deklarieren einen String. Sie haben die Form ‘IDSTR (id/minlen/maxlen)’, wobei ‘IDSTR’ ein Bezeichner ist (d.h. ein aus den Zeichen a-z,A-Z,0-9 und dem Underscore bestehender String), ‘id’ eine eindeutige Nummer (die von jetzt an als ID bezeichnet wird) angibt, ‘minlen’ die minimale und ‘maxlen’ die maximale Lnge des Strings. Die drei letztgenannten drfen auch fehlen, das Programm whlt dann selbst einen Wert fr ‘id’ und erlaubt Strings beliebiger Lnge. Die auf eine Beschreibungszeile folgende ist eine
d.h. sie enthlt den eigentlichen String und nichts anderes. Dieser darf eine Reihe von Steuerzeichen enthalten, die alle durch einen Backslash eingeleitet werden:
Backspace (Ascii 8)
Control Sequence Introducer (Ascii 155)
Escape (Ascii 27)
Form Feed (Ascii 12)
Display beep (Ascii 7)
Line Feed, newline (Ascii 10)
Carriage Return (Ascii 13)
Tab (Ascii 9)
Vertical tab (Ascii 11)
Das Klammer-Zu-Zeichen. (Dies ist evtl. innerhalb einer ‘%(..)’-Sequenz ntig, siehe Aufbau einer Quelltextbeschreibungsdatei.)
Der Backslash selbst.
Das durch ‘HH’ gegebene Ascii-Zeichen, wobei ‘HH’ Hexziffern sind.
Das durch ‘OOO’ gegebene Ascii-Zeichen, wobei ‘OOO’ Hexziffern sind.
Schlielich signalisiert ein einzelner Backslash am Zeilenende, da die Zeile (und damit der String) auf der nchsten Zeile fortgesetzt wird. Es ist dadurch mglich, beliebig lange Strings zu definieren. (FlexCat ist lediglich durch das verfgbare RAM eingeschrnkt.)
Ein String wird also stets durch eine Beschreibungszeile und eine unmittelbar darauffolgende Stringzeile angegeben. Ein Beispiel wre
msgHello (/4/) Hello, this is english!\n
In diesem Beispiel fehlt die ID, wird also vom Programm festgesetzt. (Dies ist sicher der einfachste und beste Weg.) Die 4 gibt hier an, da der in der nchsten Zeile stehende String wenigstens 4 Zeichen enthalten soll, eine maximale Lnge fehlt.
Als ausfhrlicheres Beispiel zum Aufbau einer Katalogbeschreibungsdatei kann die Datei ‘FlexCat.cd’ dienen.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Katalogbersetzungsdateien entsprechen in ihrem Aufbau ganz und gar den Katalogbeschreibungsdateien. Nur sind auf den Kommandozeilen andere Kommandos erlaubt und die Beschreibungszeilen enthalten keine Angaben ber ID sowie minimale oder maximale Lnge, da diese aus der Katalogbeschreibung entnommen werden. Selbstverstndlich sollte jeder String aus der Katalogbeschreibung auch in der Katalogbersetzung vorkommen und es drfen keine Strings (d.h. Stringbezeichner) auftauchen, die nicht auch in der Katalogbeschreibung definiert sind. Dies zu sichern geht am einfachsten, indem man mit FlexCat aus den evtl. genderten Katalogbeschreibungen und den evtl. alten Katalogbersetzungen neue erzeugt. See section Aufruf des Programms.
Die in Katalogbersetzungsdateien erlaubten Kommandos sind:
##version <str>
Gibt die Version des Kataloges in Form eines AmigaDOS-Versionsstrings an. Beispiel:
‘##version $VER: Deutsch.ct 8.1 (27.09.93)’
Die Versionsnummer dieses Kataloges ist 8. Um ihn zu erffnen, mssten also in der Katalogbeschreibung die Versionsnummern 0 oder 8 angegeben werden.
##language <str>
Gibt die Sprache des Kataloges an. Natrlich sollte dies eine andere als die Sprache der Katalogbeschreibung sein. Die Katalogsprache und die Katalogversion mssen angegeben werden.
##codeset <num>
Ein derzeit noch unbenutztes Argument fr die Erffnung eines Kataloges. Sollte immer 0 sein. (Dies ist auch der Vorgabewert.)
Das obige Beispiel sieht hier so aus:
msgHello Hallo, dies ist deutsch!\n
Als weiteres Beispiel einer Katalogbersetzungsdatei kann ‘Deutsch.ct’ dienen.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Der wichtigste Teil von FlexCat ist die Quelltexterzeugung. Bis hierher bietet FlexCat nichts, was nicht auch CatComp, KitCat und Konsorten bieten wrden. Der erzeugte Quelltext soll nun die Verwendung der erzeugten Kataloge mglichst einfach machen. Andererseits soll dies aber unter beliebigen Programmiersprachen und fr beliebige Anforderungen gelten. Um diese scheinbaren Widersprche aufzulsen, kennt FlexCat die Quelltextbeschreibungsdateien. Das sind Dateien, die gewissermaen die Vorlage fr den zu erzeugenden Quelltext bilden. Wie die Katalogbeschreibungs- und die -bersetzungsdateien sind sie mit einem Editor erzeug- und bearbeitbar: Das ist es, was FlexCat so flexibel macht.
FlexCat durchsucht die Quelltextbeschreibung nach gewissen Symbolen, die durch die in der Katalogbeschreibung gegebenen Werte ersetzt werden. Mgliche Symbole sind zum einen die mit einem Backslash eingeleiteten Steuerzeichen, die auch in den Strings der Katalogbeschreibung und der Katalogbersetzung erlaubt sind, zum anderen aber Steuerzeichen, die mit einem <%>-Zeichen beginnen: Fr C-Programmierer ein wohlvertrautes Konzept. Mgliche Steuerzeichen sind:
ist der Basisname der Quelltextbeschreibungsdatei. (Fr ‘FlexCat.cd’
als CDFILE wre also FlexCat
der Basisname. Wie schon erwhnt, kommt
es deshalb beim Argument CDFILE sehr wohl auf Gro-/Kleinschreibung an;
see section Aufruf des Programms)
ist die Versionsnummer aus der Katalogbeschreibung, nicht zu verwechseln mit dem Versionsstring aus der Katalogbersetzung.
ist die Sprache der Katalogbeschreibung. Bitte beachten Sie, da hier
ein String eingesetzt wird, dessen Aussehen mit dem Kommando
##stringtype
beeinflut wird.
ist die Anzahl der Strings in der Katalogbeschreibung.
ist das Prozentzeichen selbst.
Das wesentlichste sind aber die folgenden Steuerzeichen. Sie reprsentieren auf unterschiedliche Art und Weise die Strings der Katalogbeschreibung. Zeilen die eines dieser Zeichen enthalten, werden von FlexCat fr jeden Katalogstring wiederholt, da im Normalfall kaum alle Strings in eine Zeile passen wrden.
ist der Bezeichner aus der Katalogbeschreibung.
ist die ID des Strings
ist der String selbst; dieser wird in einer von der Programmiersprache
abhngigen Art und Weise dargestellt. Dies kann mit den Kommandos
##stringtype
und ##shortstrings
beeinflut werden.
gibt an, da der zwischen den Klammern stehende Text bei allen Strings auer dem letzten auftauchen soll. Dies ist z.B. bei Arrays ntzlich, wenn unterschiedliche Arrayeintrge durch ein Komma getrennt werden sollen, nach dem letzten aber kein Komma mehr kommen soll: Dann wrde man nach dem Stringeintrag eben ‘%(,)’ schreiben. Beachten Sie, da der Text zwischen den Klammern nicht weiter auf ‘%’-Symbole untersucht wird. Backslash-Sequenzen sind allerdings weiter erlaubt.
Die Steuerzeichen ‘%l’ und ‘%s’ erzeugen Strings. Die Darstellung von Strings hngt natrlich von der Programmiersprache ab, fr die Quelltext erzeugt werden soll. Deshalb knnen in die Quelltextbeschreibung hnlich wie in der Katalogbersetzung Kommandos eingebaut werden. Diese mssen am Zeilenanfang stehen und jeweils eine eigene Zeile einnehmen. Die mglichen Kommandos sind:
##shortstrings
gibt an, da lange Strings ber mehrere Zeilen verteilt werden drfen. Dies ist nicht in allen Programmiersprachen ohne weiteres mglich und vor allem besonders stark von der verwendeten Programmiersprache abhngig. Deshalb werden vorgabemig notfalls eben sehr lange Zeilen erzeugt.
##stringtype <art>
gibt die Syntax der Strings an. Mgliche Arten sind:
Es werden keinerlei zustzliche Zeichen erzeugt und lediglich die Zeichen des Strings ausgegeben. Es ist keine Ausgabe von Binrzeichen (das sind die mit dem Backslash erzeugten Zeichen) mglich.
erzeugt Strings gem den Regeln der Programmiersprache C, d.h. die Strings werden links und rechts mit je einem Anfhrungszeichen abgegrenzt. Falls Strings ber mehrere Zeilen verteilt werden, so werden die Zeilen bis auf die letzte mit einem Backslash beendet. (Der Backslash ist innerhalb von Makros ntig.) Steuerzeichen werden mit ‘\OOO’ ausgegeben. See section FlexCat-Quelltext in C-Programmen.
wie der Stringtyp bei C, allerdings wird kein Backslash bei Zeilentrennung erzeugt. See section FlexCat-Quelltext in Oberon-Programmen.
Strings werden mit ‘dc.b’ erzeugt und links und rechts mit einem einfachen Anfhrungsstrich abgegrenzt. Binrzeichen werden mit $XX erzeugt. See section FlexCat-Quelltext in Assembler-Programmen.
Als Beispiel betrachten wir einen Auszug aus der Quelltextbeschreibungsdatei ‘C_h.sd’, die eine Include-Datei fr die Programmiersprache C erzeugt:
##stringtype C ##shortstrings #ifndef %b_CAT_H /* Sicherstellen, da Include-Datei */ #define %b_CAT_H /* nur einmal verwendet wird. */ #ifndef EXEC_TYPES_H /* Ntige andere Include- */ #include <exec/types.h> /* Dateien einbinden. */ #endif #ifndef LIBRARIES_LOCALE_H #include <libraries/locale.h> #endif /* Prototypen */ extern void Open%bCatalog(struct Locale *, STRPTR); extern void Close%bCatalog(void); extern STRPTR Get%bString(LONG); /* Definitionen der Bezeichner und ihrer ID's */ #define %i %d /* Diese Zeile wird fr jeden Katalog- */ /* wiederholt. */ #endif
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Wie der Quelltext benutzt wird, hngt natrlich vom erzeugten Quelltext und damit von den jeweiligen Quelltextbeschreibungen ab. See section Aufbau einer Quelltextbeschreibungsdatei. Es kann hier deshalb nur auf die mit FlexCat mitgelieferten Quelltextbeschreibungsdateien eingegangen werden.
Alle diese Dateien sind so aufgebaut, da das fertige Programm auf jeden
Fall auch ohne die locale.library
arbeitet. Allerdings mu es eine
globale Variable ‘LocaleBase’ (d.h. ‘_LocaleBase’ fr
Assembler-Programmierer) geben und diese mu mit ‘NULL’ oder durch einen
Aufruf von Exec.OpenLibrary
initialisiert sein. Im ersten Fall
werden natrlich nur die eingebauten Strings aus der Katalogbeschreibung
verwendet. Eine Ausnahme stellt die Quelltextbeschreibung ‘C_c_V20.sd’
dar, die auch unter der Workbench 2.0 Lokalisierung ermglicht, indem sie
evtl. die locale.library
durch die iffparse.library
ersetzt.
(Diese Version bentigt dann auch eine Variable ‘IFFParseBase’ fr
die das gleiche wie fr ‘LocaleBase’ gilt.) See section FlexCat-Quelltext in C-Programmen. Als Programmierer
bentigen Sie keinerlie Kenntnisse dieser Libraries, auer Sie wollen
eigene Quelltextbeschreibungen erzeugen.
Es gibt lediglich 3 Funktionen, die aufzurufen recht simpel ist:
Diese Funktion versucht, einen Katalog zu erffnen. Das Argument
locale
ist ein Zeiger auf eine Locale-Struktur, language
ein
Zeiger auf einen String, der den Namen der gewnschten Sprache enthlt.
Beide Argumente werden an die Locale-Funktion OpenCatalog bergeben und
sollten normalerweise immer NULL (bzw. NIL) sein, da andernfalls die
Voreinstellungen des Benutzers berschrieben werden. Nheres ist in den
AutoDocs nachzulesen.
Hat der Benutzer als Vorgabesprachen etwa ‘Deutsch’ und ‘Francais’ eingestellt und der Basisname des Programms ist ‘XXX’, so wird nacheinander nach folgenden Dateien gesucht:
‘PROGDIR:Catalogs/Deutsch/XXX.catalog’ ‘LOCALE:Catalogs/Deutsch/XXX.catalog’ ‘PROGDIR:Catalogs/Francais/XXX.catalog’ ‘LOCALE:Catalogs/Francais/XXX.catalog’
Dabei ist ‘PROGDIR:’ das aktuelle Directory des Programms. Die Reihenfolge von ‘PROGDIR:’ und ‘LOCALE:’ kann evtl. vertauscht werden, falls dadurch ein Requester wie ‘Insert volume YYY’ unterdrckt werden kann.
OpenCatalog ist vom Typ void (fr Modula2-Programmierer: Eine Prozedur), liefert also kein Ergebnis.
Ist der Katalog erffnet, so erhlt man mit dieser Funktion einen Zeiger auf
den Katalogstring mit der angegebenen Nummer. Die ID wird in der
Katalogbeschreibung definiert. Es versteht sich von selbst, da die
Strings Eigentum der locale.library
sind und deshalb nicht verndert
werden drfen.
Ein Beispiel ist vielleicht ntzlich. Im Beispiel aus der Katalogbeschreibung
wird der String msgHello
definiert. Die Quelltextbeschreibungen
deklarieren nun eine Konstante ‘msgHello’, der die ID reprsentiert.
Damit knnte der String in C so ausgegeben werden:
printf("%s\n", GetString(msgHello));
Mit dieser Funktion wird der Katalog (das heit das belegte RAM) vor dem Programmende wieder freigegeben. Die Funktion kann gefahrlos zu jeder Zeit aufgerufen werden, sogar wenn OpenCatalog gar nicht aufgerufen wurde.
7.1 FlexCat-Quelltext in C-Programmen | ||
7.2 FlexCat-Quelltext in Oberon-Programmen | ||
7.3 FlexCat-Quelltext in Assembler-Programmen |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Der C-Quelltext besteht aus zwei Teilen: Einer ‘.c’-Datei, die einfach bersetzt und mit dem Linker eingebunden wird und nicht weiter zu interessieren braucht und einer ‘.h’-Datei, die vom benutzenden Programm mit ‘#include’ eingebunden wird. In ihr werden die ID’s der Strings als Makro definiert.
Dabei gibt es zwei unterschiedliche Versionen: ‘C_c_V21.sd’ und
‘C_h_V21.sd’ sind recht simple Versionen, die einfach die entsprechenden
Funktionen der locale.library
benutzen. Dementsprechend ist mit
ihnen Lokalisierung ab Workbench 2.1 mglich. Dagegen ersetzen
‘C_c_V20.sd’ und ‘C_h_V20.sd’ unter 2.0 evtl. die
locale.library
durch die iffparse.library
. Das setzt allerdings voraus, da das
Programm eine Option Language
besitzt, die die Wahl einer Sprache
ermglicht und deren Wert dann an ‘OpenCatalog’ bergeben wird.
Unter 2.1 oder hher sollte diese Option nicht benutzt werden.
Es wre prinzipiell durchaus denkbar, auch eine dritte Version zu schreiben, die Lokalisierung sogar unter 1.3 ermglicht, aber das habe ich nicht getan, da ich 1.3 nicht mehr untersttzen mchte.
Um die FlexCat-Funktionen OpenCatalog und CloseCatalog von den gleichnamigen
Locale-Funktionen zu unterscheiden und um theoretisch auch das gleichzeitige
Erffnen mehrerer Kataloge zu ermglichen, tragen die FlexCat-Funktionen
etwas genderte Namen, nmlich ‘OpenXXXCatalog’, ‘CloseXXXCatalog’
und ‘GetXXXString’. Dabei ist ‘XXX’ der Basisname aus der
Quelltextbeschreibung. Das Konzept ist von der GadToolsBox
bernommen
und meines Erachtens bewhrt. See section Aufbau einer Quelltextbeschreibungsdatei.
Die Prototypen der Funktionen sind:
void OpenXXXCatalog(struct Locale *loc, char *language); STRPTR GetXXXString(ULONG); void CloseXXXCatalog(void);
Zum Schlu noch ein Beispiel eines Programms, das FlexCat verwendet.
#include <stdio.h> #include <stdlib.h> #include <XXX.h> /* Diese Include-Datei unbedingt */ /* einbinden! */ #include <clib/exec_protos.h> struct Library *LocaleBase; /* Library auf jeden Fall selber erffnen, auch wenn der */ /* Compiler das automatisch kann! */ void main(int argc, char *argv[]) { LocaleBase = OpenLibrary("locale.library", 38); /* KEIN Abbruch, falls OpenLibrary() nicht erfolg- */ /* reich! (Natrlich nur, wenn Locale-Funktionen nicht */ /* anderweitig benutzt werden. */ OpenXXXCatalog(NULL, NULL); ... /* andere Funktionen */ printf("%s\n", GetXXXString(msgHello)); ... /* nochmal andere Funktionen */ CloseXXXCatalog(); if (LocaleBase) CloseLibrary(LocaleBase); }
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Es gibt zwei unterschiedliche Quelltextbeschreibungen: ‘Oberon_V38.sd’ erzeugt Quelltext, der ‘Locale.mod’ von Hartmut Goebel verwendet. Der mit ‘Oberon_V39.mod’ erzeugte Quelltext bentigt dagegen das beim AmigaOberon mitgelieferte ‘Locale.mod’.
Die Prototypen der Funktionen sind:
XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR); XXX.GetString(num: LONGINT): Exec.StrPtr; XXX.CloseCatalog();
Dabei ist ‘XXX’ jeweils der Basisname aus der Quelltextbeschreibung. See section Aufbau einer Quelltextbeschreibungsdatei.
Zum Schlu noch ein Beispiel eines Programms, das den von FlexCat erzeugten Quelltext verwendet:
MODULE Irgendwas; IMPORT x:=XXX; Dos; BEGIN x.OpenCatalog(NIL, ""); ... (* Irgendwelche anderen Funktionen. *) Dos.PrintF("%s\n", x.GetString(x.msgHello)); ... (* Nochmal irgendwelche anderen Funktionen. *) (* Katalog wird beim Programmende automatisch *) (* geschlossen. *) END Irgendwas;
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Der Assembler-Quelltext erzeugt Code fr den Aztec-Assembler. Dieser drfte sich aber kaum wesentlich von anderen verbreiteten Assemblern unterscheiden und es sollte ohne groe Probleme mglich sein, daraus eine eigene Quelltextbeschreibung zu machen. Der Quelltext besteht aus zwei Teilen: Einer ‘.asm’-Datei, die einfach bersetzt und mit dem Linker eingebunden wird und nicht weiter zu interessieren braucht und einer ‘.i’-Datei, die vom benutzenden Programm mit ‘include’ eingebunden wird. In ihr werden die ID’s der Strings definiert.
Um theoretisch auch das gleichzeitige Erffnen mehrerer Kataloge zu
ermglichen, tragen die FlexCat-Funktionen etwas genderte Namen, nmlich
‘OpenXXXCatalog’, ‘CloseXXXCatalog’ und ‘GetXXXString’. Dabei
ist ‘XXX’ der Basisname aus der Quelltextbeschreibung. Das Konzept ist
von der GadToolsBox
bernommen und meines Erachtens bewhrt.
See section Aufbau einer Quelltextbeschreibungsdatei.
Die Funktionen liefern wie blich das Ergebnis in d0 und sichern die Register d2-d7 und a2-a7. OpenCatalog erwartet seine Argumente in a0 (Zeiger auf Locale-Struktur) und in a1 (Zeiger auf String mit zu verwendender Sprache). Wie schon erwhnt, sollten diese Argumente im Normalfall immer NULL sein. GetString erwartet in d0 eine ID.
Zum Schlu noch ein Beispiel eines Programms, das FlexCat verwendet.
include "XXX.i" /* Enthlt xref OpenXXXCatalog usw. */ xref _LVOOpenLibrary xref _LVOCloseLibrary xref _AbsExecBase dseg LocNam: dc.b "locale.library",0 dc.l _LocaleBase,4 ; Dieser Name ist obligatorisch cseg main: move.l #38,d0 ; Locale erffnen lea LocName,a1 move.l _AbsExecBase.a6 jsr _LVOOpenLibrary(a6) * KEIN Abbruch, falls OpenLibrary() nicht erfolgreich! (Natrlich nur, * wenn Locale-Funktionen nicht anderweitig benutzt werden. move.l #0,a0 move.l #0,a1 jsr OpenXXXCatalog ; Katalog erffnen ... ; andere Funktionen move.l #msgHello,d0 ; Zeiger auf String holen jsr GetXXXString jsr PrintD0 ; und ausgeben ... ; nochmal andere Funktionen Ende: jsr CloseXXXCatalog ; Katalog schlieen move.l _LocaleBase,a1 ; Locale evtl. schlieen move.l a1,d0 beq Ende1 jsr CloseLibrary Ende1: rts end
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Ich beabsichtige eigentlich nicht, das Programm wesentlich weiterzuentwickeln, denke auch nicht, da das ntig sein wird, bin aber natrlich trotzdem fr jegliche Anregung, Vorschlge oder notfalls auch Kritik offen. Was ich auf jeden Fall gerne machen werde, sind andere Stringtypen, falls sich diese fr andere Programmiersprachen als notwendig erweisen sollten.
Ferner wre ich auf jeden Fall dankbar fr weitere Quelltextbeschreibungen und wrde diese gerne in einer spteren Version ffnetlich zugnglich machen - egal, welche Programmiersprache oder mit welchen Erweiterungen. Voraussetzung ist natrlich, da der von diesen Quelltextbeschreibungen erzeugte Code in einem laufenden Programm erfolgreich erprobt wurde.
Ebenso dankbar wre ich natrlich auch fr neue Kataloge. Es gengt der Eintrag der entsprechenden Strings in der Datei ‘NewCatalogs.ct’. Wie das geht, sollte nach der Lektre dieser Dokumentation hoffentlich klar sein.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Danken mchte ich:
fr KitCat, den Vorgnger von FlexCat, der mir gute Dienste geleistet hat, aber irgendwann eben nicht flexibel genug war.
fr die Amiga-Version von texinfo, mit der diese Dokumentation geschrieben ist.
fr die Urversion von texinfo und fr viele andere hervorragende Programme.
fr DICE und besonders fr DME.
fr den italienischen Katalog.
fr die Beantwortung vieler dummer Fragen und fr viele Augenblicke erfreulich ungezgelten Schwachsinns :-), z.B. PowerStat (Kai Hoffmann), ZZA (Bernhard Mllemann), Stargazer (Petra Zeidler), stefanb (Stefan Becker), Tron (Mathias Scheler), ill (Markus Illenseer).
fr den Amiga und fr die Kickstart 2.0 :-) Macht weiter mit der Kiste, dann bin ich vielleicht auch die nchsten 8 Jahre Amiga-Benutzer!
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | .
A B C D F I K O P Q S W Z |
---|
Jump to: | .
A B C D F I K O P Q S W Z |
---|
[Top] | [Contents] | [Index] | [ ? ] |
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated on August 30, 2024 using texi2html 5.0.
The buttons in the navigation panels have the following meaning:
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ < ] | Back | Previous section in reading order | 1.2.2 |
[ Up ] | Up | Up section | 1.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ >> ] | FastForward | Next chapter | 2 |
[Top] | Top | Cover (top) of document | |
[Contents] | Contents | Table of contents | |
[Index] | Index | Index | |
[ ? ] | About | About (help) |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
This document was generated on August 30, 2024 using texi2html 5.0.