4 @setfilename FlexCat_deutsch.guide
5 @settitle FlexCat @value{VERSION} Dokumentation
9 @c FlexCat: The flexible catalog generator V1.7
10 @c Copyright (C) 1993 Jochen Wiedmann
12 @c This program is free software; you can redistribute it and/or modify
13 @c it under the terms of the GNU General Public License as published by
14 @c the Free Software Foundation; either version 2 of the License, or
15 @c (at your option) any later version.
17 @c This program is distributed in the hope that it will be useful,
18 @c but WITHOUT ANY WARRANTY; without even the implied warranty of
19 @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 @c GNU General Public License for more details.
22 @c You should have received a copy of the GNU General Public License
23 @c along with this program; if not, write to the Free Software
24 @c Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 @c This file contains the german documentation.
29 @c Computer: Amiga 1200 Compiler: DICE V2.07.54 (3.0)
31 @c Autor: Jochen Wiedmann
35 @c Internet: wiedmann@uni-tuebingen.de
41 @set Chapterstring Abschnitt
42 @set Sectionstring Abschnitt
43 @set sectionstring Abschnitt
45 @set Contentsstring Inhaltsverzeichnis
56 @subtitle{Der flexible Kataloggenerator}
58 @subtitle{Version @value{VERSION}}
59 @author Jochen Wiedmann
60 @vskip 0pt plus 1filll
62 @halign{@hfil#&#@hfil@cr
63 Copyright @copyright 1993 & Jochen Wiedmann@cr
65 72555 & Metzingen (Deutschland)@cr
66 & Tel. 07123 / 14881@cr
67 & Internet: wiedmann@@uni-tuebingen.de@cr
71 Diese Dokumentation sowie das gesamte Programmpaket dürfen im Rahmen der
72 ``GNU General Public License''
73 kopiert, verändert und weitergegeben werden solange diese
74 Copyright-Notiz und diese Erlaubnis unverändert auf allen Kopien enthalten
76 ``GNU General Public License'' der Free Software Foundation (in der Datei
77 @code{COPYING}) mitkopiert und weitergegeben wird.
80 Permission is granted to process this file by TeX and print the results,
81 provided the printed document carries a copying permission notice identical to
82 this one except for the removal of this paragraph (this paragraph not being
83 relevant to the printed manual).
86 Es wird @strong{keine} Garantie gegeben, daß die Programme, die in dieser
87 Dokumentation beschrieben werden, 100%ig zuverlässig sind. Sie benutzen
88 diese Programme auf eigene Gefahr. Der Autor kann auf @strong{keinen} Fall
89 für irgendwelche Schäden verantwortlich gemacht werden, die durch die
90 Anwendung dieser Programme entstehen.
98 @top FlexCat V@value{VERSION} Dokumentation
99 Diese Datei beschreibt den Umgang mit FlexCat V@value{VERSION}, einem
100 Programm zur Erzeugung von Catalogs und dem sie verwendenden Quelltext.
101 FlexCat arbeitet wie @code{CatComp} oder @code{KitCat}, kann aber praktisch
102 beliebigen Quelltext erzeugen. Dies funktioniert durch sogenannte
103 @code{Source-description-Dateien}, die gewissermaßen eine Vorlage für den
104 zu erzeugenden Quelltext darstellen. Sie können mit einem Editor bearbeitet
105 und verändert werden und dadurch hoffentlich an beliebige Programmiersprachen
106 und Bedürfnisse angepaßt werden.
111 * Copyright:: Copyrights, (Nicht)-Garantie
112 * Übersicht:Uebersicht. Was ist FlexCat?
113 * Installation:: Wie kriege ich das Ding zum Laufen?
115 Arbeit mit dem Programm:
117 * Programmstart:: Aufruf des Programms
118 * Catalog description:: Katalogbeschreibungsdateien (@key{.cd}-Dateien)
119 * Catalog translation:: Katalogübersetzungsdateien (@key{.ct}-Dateien)
120 * Source description:: Quelltextbeschreibungsdateien (@key{.sd}-Dateien)
121 * Benutzung:: Einbau des erzeugten Quelltextes in eigene Programme
125 * Zukunft:: Weiterentwicklung des Programms
126 * Danksagungen:: Was ich schon lange mal sagen wollte@dots{}
127 * Index:: Wo das steht, was garantiert nicht gesucht wird
137 @chapter Copyright und andere rechtliche Dinge
140 @cindex Rechtliche Dinge
141 @cindex Genehmigungen
148 Copyright @copyright{} 1993 Jochen Wiedmann
150 72555 Metzingen (Deutschland)
152 Internet: wiedmann@@uni-tuebingen.de
155 Diese Dokumentation sowie das gesamte Programmpaket dürfen im Rahmen der
156 ``GNU General Public License''
157 kopiert, verändert und weitergegeben werden solange diese
158 Copyright-Notiz und diese Erlaubnis unverändert auf allen Kopien enthalten
160 ``GNU General Public License'' der Free Software Foundation (in der Datei
161 @code{COPYING}) mitkopiert und weitergegeben wird.
164 Permission is granted to process this file by TeX and print the results,
165 provided the printed document carries a copying permission notice identical to
166 this one except for the removal of this paragraph (this paragraph not being
167 relevant to the printed manual).
170 Es wird keine Garantie gegeben, daß die Programme, die in dieser Dokumentation
171 beschrieben werden, 100%ig zuverlässig sind. Sie benutzen diese Programme auf
172 eigene Gefahr. Der Autor kann auf @strong{keinen} Fall für irgendwelche
173 Schäden verantwortlich gemacht werden, die durch die Anwendung dieser
183 @cindex Programmiersprache
184 Seit der Workbench 2.1 bietet der Amiga ein sehr schönes System an, mit
185 dem Programme in verschiedenen, praktisch beliebigen Sprachen benutzt
186 werden können: Die @code{locale.library}. (Man nennt diesen Vorgang
187 @code{Lokalisierung}, daher der Name.)
189 Die Idee ist eigentlich recht simpel: Man wählt eine Sprache, meist die
190 englische aus und schreibt sein Programm ganz normal, abgesehen davon,
191 daß Strings nicht mehr direkt eingegeben werden, sondern über einen
192 Funktionsaufruf im Programm verwendet werden. Durch einen weiteren
193 Funktionsaufruf zu Beginn des Programms erhält der Benutzer nun die
194 Möglichkeit, anstelle der vorgegebenen Strings andere zu wählen, die in
195 einer externen Datei, einem sogenannten @code{Katalog} enthalten sind.
197 Diese Katalogdateien sind vom Programm unabhängig. Möchte man das Programm
198 in einer weiteren Sprache betreiben, so ist lediglich eine neue Katalogdatei
199 zu erzeugen, das eigentliche Programm muß nicht geändert werden.
201 Auf den Programmierer kommen dadurch aber zusätzliche Aufgaben hinzu: Es
202 müssen die Kataloge erzeugt werden, die Strings nach wie vor eingegeben
203 werden und es muß zusätzlicher Code erzeugt werden, der die Behandlung der
204 Kataloge übernimmt. Dies soll durch FlexCat so weit wie möglich vereinfacht
205 und automatisiert werden, ohne dabei auf Flexibilität (vor allem in Bezug
206 auf den erzeugten Quelltext) zu verzichten. Betrachten wir als Beispiel
207 ein Programm @file{HelloLocalWorld.c}. Das Programm wird letzten Endes so
212 #include <HelloLocalWorld_Cat.h> /* @strong{Muß} eingebunden werden! */
214 void main(int argc, char *argv[])
216 printf("%s\n", msgHello);
220 Beachten Sie, daß dies dem originalen @file{HelloWorld.c} fast völlig
221 entspricht, abgesehen davon, daß der String "Hello, world!" durch eine
222 Konstante msgHello ersetzt wird.
224 Man beginnt stets damit, diese Konstanten und die zugeordneten Strings
225 in einer sogenannten @code{Katalogbeschreibung} abzulegen. @xref{Catalog
226 description}. Unsere Katalogbeschreibung würde
227 in einer Datei @file{HelloLocalWorld.cd} stehen und so aussehen:
229 ; Kommentare sind natürlich erlaubt! Jede mit einem Semikolon
230 ; beginnende Zeile ist eine Kommentarzeile.
232 ; Die Sprache der eingebauten Strings:
235 ; Die für den Aufruf von Locale/OpenCatalog() verwendete
236 ; Versionsnummer. Dies ist anders als bei Exec/OpenLibrary():
237 ; 0 bedeutet beliebige Version, andere Nummern müssen exakt
241 ; Dies definiert einen String und die ID unter der er verwendet
242 ; wird. Die Zahl 4 gibt an, daß der String wenigstens 4 Zeichen
248 Mit FlexCat erzeugt man aus der Katalogbeschreibung zwei andere Dateien:
249 Das Includefile @file{HelloLocalWorld_Cat.h} definiert die Konstanten,
250 die Datei @file{HelloLocalWorld_Cat.c} enthält ein Array mit den Strings
251 sowie versteckte Initialisierungsroutinen. Wie diese genau aussehen, ist
252 unerheblich, insbesondere benötigt man keinerlei Kenntnisse der
253 @code{locale.library}!
255 Allerdings könnten Sie neugierig sein, wie diese Dateien aussehen oder
256 sogar ein anderes Aussehen wünschen. Hier liegt der Unterschied zwischen
257 FlexCat und anderen Kataloggeneratoren: Bei FlexCat ist kein bestimmtes
258 Format vorgeschrieben. Mit Hilfe der sogenannten Quelltextbeschreibungen
259 können Sie praktisch beliebige Formate vorgeben. Damit könnten z.B. auch
260 unter AmigaDOS 2.0 Kataloge verwendet werden. @xref{Source description}.
261 Solche Katalogbeschreibungen sind bei FlexCat bereits mitgeliefert
262 werden. Damit kann man die Quelltexte folgendermaßen erzeugen:
264 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c.sd}
265 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd}
268 Wenn das Programm fertig ist, dann wird FlexCat erneut verwendet, um
269 sogenannte @code{Katalogübersetzungen} zu erzeugen, eine für jede
270 weitere Sprache außer der eingebauten. @xref{Catalog translation}. Erzeugen
271 wir also eine deutsche Katalogübersetzung:
273 @samp{FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct}
276 Die fertige Datei sieht dann so aus:
281 ; Kommentare sind natürlich erlaubt! Jede mit einem Semikolon
282 ; beginnende Zeile ist eine Kommentarzeile.
284 ; Die Sprache der eingebauten Strings:
286 ; Die für den Aufruf von Locale/OpenCatalog() verwendete
287 ; Versionsnummer. Dies ist anders als bei Exec/OpenLibrary():
288 ; 0 bedeutet beliebige Version, andere Nummern müssen exakt
291 ; Dies definiert einen String und die ID unter der er verwendet
292 ; wird. Die Zahl 4 gibt an, daß der String wenigstens 4 Zeichen
299 Dies sieht der Katalogbeschreibung sehr ähnlich. FlexCat übernimmt dabei
300 die Kommentare, auch dort wo es nutzlos ist: Z.B. ist der Kommentar zur
301 Länge der Strings hier bedeutungslos, da diese bereits in der
302 Katalogbeschreibung angegeben werden muß. Man muß nun lediglich die
303 Lücken füllen, d.h. die Sprache (language, hier Deutsch), die Version
304 (einen typischen Versionsstring, @samp{$VER: Deutsch.catalog (11.03.94)}
305 wäre z.B. gut möglich) und den codeset (hier 0, siehe Locale/OpenCatalog()
306 für Details) sowie natürlich die übersetzten Strings selber. FlexCat
307 erleichtert dies, indem die originalen Strings jeweils als Kommentare
310 Schließlich werden daraus die eigentlichen Kataloge erzeugt:
312 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog}
315 Beachten Sie, daß man dazu weder das Programm noch die Quelltexte benötigt.
316 Dies kann also ohne weiteres später geschehen, etwa um nachträglich weitere
317 Sprachen zu unterstützen. Es ist üblich und durchaus erwünscht, eine
318 Datei @file{NewCatalog.ct} mitzuliefern, die das Erstellen eigener Kataloge
321 Aber was geschieht, wenn das Programm später geändert oder erweitert wird?
322 Dann muß nur die Katalogbeschreibung geändert werden. Mit Hilfe von
323 FlexCat können die Katalogübersetzungen auf den neuesten Stand gebracht
326 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct}
329 Es müssen dann lediglich noch evtl. neue Strings eingegeben werden.
334 @chapter Installation des Programms
336 @cindex Systemanforderungen
337 FlexCat sollte auf jedem Amiga mit OS 2.0 laufen.
338 Die erzeugten Programme sind auf @strong{jedem} Amiga lauffähig (zumindest
339 was die Verwendung der @code{locale.library} betrifft). Prinzipiell
340 sind sie sogar auf anderen Rechnern lauffähig.
341 Lokalisierung ist aber natürlich nur auf dem Amiga und ab der
342 Workbench 2.1 möglich, da erst dann die @code{locale.library}
343 zur Verfügung steht. @xref{Benutzung}.
345 Es ist aber prinzipiell durchaus möglich, auch unter einer früheren
346 Workbench oder gar auf anderen Rechnern Lokalisierung anzubieten: Ein
347 Beispiel dafür liefert die Quelltextbeschreibungsdatei @file{C_c_V20.sd},
348 in der die @code{locale.library} durch die
349 @code{iffparse.library} ersetzt wird, falls letztere vorhanden ist, erstere
350 dagegen nicht. Damit ist Lokalisierung schon ab der Workbench 2.0 möglich.
353 Zur Installation ist nichts weiter zu tun, als das eigentliche Programm
354 an eine sinnvolle Stelle Ihres Suchpfades zu kopieren und einen geeigneten
355 Platz für die Quelltextbeschreibungen auszuwählen. Möglicherweise
356 wollen Sie die Umgebungsvariable @var{FLEXCAT_SDDIR} setzen.
357 @xref{Programmstart}.
359 Falls Sie mit einer anderen als der englischen Sprache arbeiten wollen,
360 müssen Sie außerdem den entsprechenden Katalog an eine geeignete Stelle
361 kopieren. Im Falle der deutschen Sprache wäre dies
362 @file{Catalogs/Deutsch/FlexCat.catalog}. Der einfachste Platz ist das
363 Verzeichnis @file{Locale:Catalogs/Deutsch}, möglich ist aber auch,
364 einfach das ganze Verzeichnis @file{Catalogs} in das Directory des
365 Programms zu kopieren. @xref{Benutzung}.
370 @chapter Aufruf des Programms
371 FlexCat arbeitet nur vom CLI aus. Die Aufrufsyntax ist
374 FlexCat CDFILE/A,CTFILE,CATALOG/K,NEWCTFILE/K,SOURCES/M,WARNCTGAPS/S
377 Dies ist die Bedeutung der Argumente:
380 ist der (obligatorische) Name einer zu lesenden Katalogbeschreibung.
381 Aus diesem Argument wird auch der Basisname bei der Quelltextbeschreibung
382 gewonnen. Achten Sie deshalb auf Groß-/Kleinschreibung!
383 @xref{Source description}.
385 ist der Name einer Katalogübersetzung, die etwa für die Erzeugung eines
386 Katalogs zu lesen ist. Außerdem kann man eine vorhandene
387 Katalogübersetzung mit Hilfe des Argumentes NEWCTFILE
388 auf den neuesten Stand zu bringen: Wird beides angegeben, so wird zunächst
389 die Katalogbeschreibung und dann die -übersetzung gelesen und
390 anschließend eine neue Katalogübersetzung erzeugt, die dieselben
391 Strings wie die alte und evtl. neue Strings (als Leerzeile) enthält.
393 ist der Name eines zu erzeugenden Kataloges. Dieses Argument ist nur
394 gemeinsam mit CTFILE erlaubt.
396 ist der Name einer neu zu erzeugenden Katalogübersetzung. Wie schon
397 gesagt, werden die Strings aus einer evtl. durch CTFILE angegebenen
398 bestehenden Datei übernommen. Fehlt das Argument CTFILE, so wird eine
399 Datei erzeugt, die nur Leerzeilen als Strings enthält.
401 sind die Namen zu erzeugender Quelltextdateien sowie der dazu zu lesenden
402 Quelltextbeschreibungen. Diese Argumente müssen die Form
403 @samp{source=template} haben, wobei @file{source} der Name der zu
404 erzeugenden Quelltextdatei und @file{template} der Name der
405 Quelltextbeschreibungsdatei ist.
407 Wird die angegebene Quelltextbeschreibung nicht gefunden, so sucht
408 FlexCat nach einer Datei gleichen Namens in @file{PROGDIR:lib}, d.h.
409 im Unterverzeichnis @file{lib} des Directories, in dem sich das
410 Programm selbst befindet. (@file{PROGDIR:lib} kann durch die
411 Environment-Variable @var{FLEXCAT_SDDIR} überschrieben werden.)
414 @samp{FlexCat FlexCat.cd FlexCat_Cat.c=Templates/C_c_V20.sd}
417 würde zunächst nach einer Datei @file{Templates/C_c_V20.sd} im aktuellen
418 Directory gesucht. Würde diese nicht gefunden, und es gäbe keine
419 Variable @var{FLEXCAT_SDDIR}, so würde nach einer Datei
420 @file{lib/Templates/C_c_V20.sd} im Directory des Programms FlexCat
421 gesucht. Gäbe es dagegen eine Variable @var{FLEXCAT_SDDIR} und diese
422 hätte etwa den Wert @samp{Work:FlexCat}, so würde nach der
423 Datei @file{Work:FlexCat/Templates/C_c_V20.sd} gesucht.
425 Gewöhnlich überprüft FlexCat nicht, ob eine Quelltextübersetzung
426 vollständig ist, d.h. ob alle Strings aus der Quelltextbeschreibung
427 auch in der -übersetzung vorkommen. Diese Option erzwingt die
431 Für weitere Beispiele siehe @ref{Uebersicht, Übersicht, Übersicht}.
435 @node Catalog description
436 @chapter Aufbau einer Katalogbeschreibung
437 @cindex Katalogbeschreibung
438 @cindex Catalog description
440 Eine Katalogbeschreibungsdatei enthält vier Arten von Zeilen.
443 @item Kommentarzeilen
444 Jede mit einem Semikolon beginnende Zeile ist eine Kommentarzeile, wird
445 also von FlexCat ignoriert. (Eine Ausnahme sind die unten beschriebenen
446 Stringzeilen, die sehr wohl mit einem Semikolon beginnen dürfen.)
449 Mit einem '#' beginnende Zeilen enthalten ein Kommando. Mögliche Kommandos
450 sind (Groß-/Kleinschreibung wird ignoriert):
452 @item #language <str>
453 gibt die Vorgabesprache des Programms an, d.h. die Sprache der Strings in
454 der Katalogbeschreibungsdatei. Vorgabe ist @samp{#language english}.
456 gibt die Versionsnummer der zu eröffnenden Kataloge an. Im Unterschied zu
457 @code{Exec/OpenLibrary} muß die Nummer genau stimmen, höhere Nummern werden
458 nicht akzeptiert. Eine Ausnahme ist es, hier die 0 als Versionsnummer
459 anzugeben, durch die jeder Katalog akzeptiert wird. Vorgabe ist
460 @samp{#version 0}. Zu diesen Befehlen siehe auch @code{Locale/OpenCatalog}.
461 @item #lengthbytes <num>
462 Weist das Programm an, vor jeden String die angegebene Zahl von Bytes zu
463 schreiben, die die Länge des Strings (ohne die lengthbytes) enthalten und
464 ohne abschließendes NUL-Byte angeben. (Ein NUL-Byte wird in Katalogen aber
465 trotzdem angehängt, im erzeugten Quelltext ist dies von der
466 Quelltextbeschreibungsdatei abhängig.) @samp{<num>} muß zwischen 0 und
467 sizeof(long)=4 liegen. Vorgabe ist @samp{#lengthbytes 0}.
468 @item #basename <str>
469 Setzt den Basisnamen für die Quelltextbeschreibung. Der aus den Argumenten
470 beim Aufruf des Programmnamens gewonnene Basisname (@pxref{Programmstart})
471 wird überschrieben. @xref{Source description}.
474 @item Beschreibungszeilen
475 deklarieren einen String. Sie haben die Form @samp{IDSTR (id/minlen/maxlen)},
476 wobei @samp{IDSTR} ein Bezeichner ist (d.h. ein aus den Zeichen a-z,A-Z,0-9
477 und dem Underscore bestehender String), @samp{id} eine eindeutige Nummer
478 (die von jetzt an als ID bezeichnet wird) angibt, @samp{minlen} die minimale
479 und @samp{maxlen} die maximale Länge
480 des Strings. Die drei letztgenannten dürfen auch fehlen, das Programm
481 wählt dann selbst einen Wert für @samp{id} und erlaubt Strings beliebiger
482 Länge. Die auf eine Beschreibungszeile folgende ist eine
485 @cindex Steuerzeichen
487 d.h. sie enthält den eigentlichen String und nichts anderes. Dieser darf
488 eine Reihe von Steuerzeichen enthalten, die alle durch einen Backslash
494 Control Sequence Introducer (Ascii 155)
500 Display beep (Ascii 7)
502 Line Feed, newline (Ascii 10)
504 Carriage Return (Ascii 13)
508 Vertical tab (Ascii 11)
510 Das Klammer-Zu-Zeichen. (Dies ist evtl. innerhalb einer @samp{%(..)}-Sequenz
511 nötig, siehe @ref{Source description}.)
513 Der Backslash selbst.
515 Das durch @samp{HH} gegebene Ascii-Zeichen, wobei @samp{HH} Hexziffern sind.
517 Das durch @samp{OOO} gegebene Ascii-Zeichen, wobei @samp{OOO} Hexziffern sind.
520 Schließlich signalisiert ein einzelner Backslash am Zeilenende, daß die
521 Zeile (und damit der String) auf der nächsten Zeile fortgesetzt wird.
522 Es ist dadurch möglich, beliebig lange Strings zu definieren. (FlexCat ist
523 lediglich durch das verfügbare RAM eingeschränkt.)
525 Ein String wird also stets durch eine Beschreibungszeile und eine
526 unmittelbar darauffolgende Stringzeile angegeben. Ein Beispiel wäre
529 Hello, this is english!\n
531 In diesem Beispiel fehlt die ID, wird also vom Programm festgesetzt. (Dies
532 ist sicher der einfachste und beste Weg.) Die 4 gibt hier an, daß der in
533 der nächsten Zeile stehende String wenigstens 4 Zeichen enthalten soll,
534 eine maximale Länge fehlt.
537 Als ausführlicheres Beispiel zum Aufbau einer Katalogbeschreibungsdatei kann
538 die Datei @file{FlexCat.cd} dienen.
542 @node Catalog translation
543 @chapter Aufbau einer Katalogübersetzung
544 @cindex Katalogübersetzung
545 @cindex Catalog translation
547 Katalogübersetzungen entsprechen in ihrem Aufbau ganz und gar den
548 Katalogbeschreibungen. Nur sind auf den Kommandozeilen andere
549 Kommandos erlaubt und die Beschreibungszeilen enthalten keine Angaben über
550 ID sowie minimale oder maximale Länge, da diese aus der Katalogbeschreibung
551 entnommen werden. Selbstverständlich sollte jeder String aus der
552 Katalogbeschreibung auch in der Katalogübersetzung vorkommen und es dürfen
553 keine Strings (d.h. Stringbezeichner) auftauchen, die nicht auch in der
554 Katalogbeschreibung definiert sind. Dies zu sichern geht am einfachsten,
555 indem man mit FlexCat aus den evtl. geänderten Katalogbeschreibungen und den
556 evtl. alten Katalogübersetzungen neue erzeugt. @xref{Uebersicht,
557 Übersicht, Übersicht}.
559 Die in Katalogübersetzungsdateien erlaubten Kommandos sind:
561 @item ##version <str>
562 Gibt die Version des Kataloges in Form eines AmigaDOS-Versionsstrings an.
565 @samp{##version $VER: Deutsch.ct 8.1 (27.09.93)}
567 Die Versionsnummer dieses Kataloges ist 8. Um ihn zu eröffnen, müssten also
568 in der Katalogbeschreibung die Versionsnummern 0 oder 8 angegeben werden.
570 @item ##rcsid $Date$ $Revision$ $Id$
571 Das Kommando @code{##version} ist etwas ungeeignet im Zusammenhang
572 mit rcs, dem Revision-Control-System. Aus diesem Grund kann man
573 statt @code{##version} auch dieses Kommando verwenden. Dabei ist
574 @samp{<date>} das Datum in der Form @samp{yy/mm/dd}. <time> die
575 Zeit (wird ignoriert), @samp{<rev>} die Versionsnummer und
576 @samp{<name>} der im Versionsstring zu verwendende Name.
579 Dieses Kommando egibt es nur aus Kompatibilitaetsgruenden mit
580 @code{CatComp}. Es überschreibt den gleichnamigen Parameter
583 @item ##language <str>
584 Gibt die Sprache des Kataloges an. Natürlich sollte dies eine andere als die
585 Sprache der Katalogbeschreibung sein. Die Katalogsprache und die
586 Katalogversion @strong{müssen} angegeben werden.
588 @item ##codeset <num>
589 Ein derzeit noch unbenutztes Argument für die Eröffnung eines Kataloges.
590 Sollte immer 0 sein. (Dies ist auch der Vorgabewert.)
592 @item ##chunk <ID> <string>
593 Dient dazu, Kommentare in den fertigen Katalog aufzunehmen. Z.B. würde
595 ## chunk AUTH German catalog translation by Jochen Wiedmann
598 einen Chunk namens AUTH (für Author) aufnehmen, der aus dem String
599 @samp{German catalog translation by Jochen Wiedmann} bestünde.
603 Das obige Beispiel sieht hier so aus:
606 Hallo, dies ist deutsch!\n
609 Als weiteres Beispiel einer Katalogübersetzungsdatei kann
610 @file{Deutsch.ct} dienen.
614 @node Source description
615 @chapter Aufbau einer Quelltextbeschreibung
616 @cindex Source description
617 @cindex Quelltextbeschreibung
619 Der wichtigste Teil von FlexCat ist die Quelltexterzeugung. Bis hierher
620 bietet FlexCat nichts, was nicht auch CatComp, KitCat und Konsorten bieten
621 würden. Der erzeugte Quelltext soll nun die Verwendung der erzeugten
622 Kataloge möglichst einfach machen. Andererseits soll dies aber unter
623 beliebigen Programmiersprachen und für beliebige Anforderungen gelten. Um
624 diese scheinbaren Widersprüche aufzulösen, kennt FlexCat die
625 Quelltextbeschreibungen. Das sind Dateien, die gewissermaßen die
626 Vorlage für den zu erzeugenden Quelltext bilden. Wie die
627 Katalogbeschreibungen und -übersetzungen sind sie mit einem
628 Editor erzeug- und bearbeitbar: Das ist es, was FlexCat so flexibel macht.
630 FlexCat durchsucht die Quelltextbeschreibung nach gewissen Symbolen, die
631 durch die in der Katalogbeschreibung gegebenen Werte ersetzt werden.
632 Mögliche Symbole sind zum einen die mit einem Backslash eingeleiteten
633 Steuerzeichen, die auch in den Strings der Katalogbeschreibung und der
634 Katalogübersetzung erlaubt sind, zum anderen aber Steuerzeichen, die mit
635 einem @key{%}-Zeichen beginnen: Für C-Programmierer ein wohlvertrautes
636 Konzept. Mögliche Steuerzeichen sind:
640 ist der Basisname der Quelltextbeschreibungsdatei. (Für @file{FlexCat.cd}
641 als CDFILE wäre also @code{FlexCat} der Basisname. Wie schon erwähnt, kommt
642 es deshalb beim Argument CDFILE sehr wohl auf Groß-/Kleinschreibung an;
643 @pxref{Programmstart})
645 ist die Versionsnummer aus der Katalogbeschreibung, nicht zu verwechseln
646 mit dem Versionsstring aus der Katalogübersetzung.
648 ist die Sprache der Katalogbeschreibung. Bitte beachten Sie, daß hier
649 ein String eingesetzt wird, dessen Aussehen mit dem Kommando
650 @code{##stringtype} beeinflußt wird.
652 ist die Anzahl der Strings in der Katalogbeschreibung.
654 ist das Prozentzeichen selbst.
657 Das wesentlichste sind aber die folgenden Steuerzeichen. Sie repräsentieren
658 auf unterschiedliche Art und Weise die Strings der Katalogbeschreibung.
659 Zeilen die eines dieser Zeichen enthalten, werden von FlexCat für jeden
660 Katalogstring wiederholt, da im Normalfall kaum alle Strings in eine
665 ist der Bezeichner aus der Katalogbeschreibung.
669 ist die ID des Strings im Dezimal- bzw. Hexadezimal bzw. Oktalformat.
670 Dabei steht @samp{n} für eine ganze Zahl, die angibt, wieviele Zeichen
671 die erzeugte Zahl einnehmen soll. (Es wird links mit Nullen aufgefüllt.)
672 Es ist möglich, die Zahl @samp{n} wegzulassen: In diesem Fall wird nichts
673 aufgefüllt und die erzeugte Zahl ist gerade so lang wie nötig.
675 gibt an, um den wievielten String (Mit 0 beginnend) es sich handelt.
677 ist der String selbst; dieser wird in einer von der Programmiersprache
678 abhängigen Art und Weise dargestellt. Dies kann mit den Kommandos
679 @code{##stringtype} und @code{##shortstrings} beeinflußt werden.
681 gibt an, daß der zwischen den Klammern stehende Text bei allen Strings
682 außer dem letzten auftauchen soll. Dies ist z.B. bei Arrays nützlich,
683 wenn unterschiedliche Arrayeinträge durch ein Komma getrennt werden
684 sollen, nach dem letzten aber kein Komma mehr kommen soll: Dann würde
685 man nach dem Stringeintrag eben @samp{%(,)} schreiben. Beachten Sie, daß
686 der Text zwischen den Klammern nicht weiter auf @samp{%}-Symbole untersucht
687 wird. Backslash-Sequenzen sind allerdings weiter erlaubt.
690 Die Steuerzeichen @samp{%l} und @samp{%s} erzeugen Strings. Die Darstellung
691 von Strings hängt natürlich von der Programmiersprache ab, für die Quelltext
692 erzeugt werden soll. Deshalb können in die Quelltextbeschreibung ähnlich
693 wie in der Katalogübersetzung Kommandos eingebaut werden. Diese müssen am
694 Zeilenanfang stehen und jeweils eine eigene Zeile einnehmen. Die möglichen
698 gibt an, daß lange Strings über mehrere Zeilen verteilt werden dürfen.
699 Dies ist nicht in allen Programmiersprachen ohne weiteres möglich und
700 vor allem besonders stark von der verwendeten Programmiersprache abhängig.
701 Deshalb werden vorgabemäßig notfalls eben sehr lange Zeilen erzeugt.
702 @item ##stringtype <art>
703 gibt die Syntax der Strings an. Mögliche Arten sind:
706 Es werden keinerlei zusätzliche Zeichen erzeugt und lediglich die
707 Zeichen des Strings ausgegeben. Es ist keine Ausgabe von Binärzeichen (das
708 sind die mit dem Backslash erzeugten Zeichen) möglich.
710 erzeugt Strings gemäß den Regeln der Programmiersprache C, d.h. die Strings
711 werden links und rechts mit je einem Anführungszeichen abgegrenzt. Falls
712 Strings über mehrere Zeilen verteilt werden, so werden die Zeilen bis auf
713 die letzte mit einem Backslash beendet. (Der Backslash ist innerhalb
714 von Makros nötig.) Steuerzeichen werden mit @samp{\OOO} ausgegeben.
717 wie der Stringtyp bei C, allerdings wird kein Backslash bei Zeilentrennung
718 erzeugt. @xref{Oberon}. Dieser Stringtyp wird auch für Modula-2
721 Strings werden mit @samp{dc.b} erzeugt und links und rechts mit einem
722 einfachen Anführungsstrich abgegrenzt. Binärzeichen werden mit $XX erzeugt.
725 Strings werden mit je einem ' umgeben. Mehrzeilihe Strings werden durch
726 ein '+' konkateniert. Binärzeichen win in C.
730 Als Beispiel betrachten wir einen Auszug aus der Quelltextbeschreibungsdatei
731 @file{C_h.sd}, die eine Include-Datei für die Programmiersprache C
737 #ifndef %b_CAT_H /* Sicherstellen, daß Include-Datei */
738 #define %b_CAT_H /* nur einmal verwendet wird. */
741 #ifndef EXEC_TYPES_H /* Nötige andere Include- */
742 #include <exec/types.h> /* Dateien einbinden. */
744 #ifndef LIBRARIES_LOCALE_H
745 #include <libraries/locale.h>
750 extern void Open%bCatalog(struct Locale *, STRPTR);
751 extern void Close%bCatalog(void);
752 extern STRPTR Get%bString(LONG);
754 /* Definitionen der Bezeichner und ihrer ID's */
755 #define %i %d /* Diese Zeile wird für jeden Katalog- */
761 Zum Suchpfad von Quelltextbeschreibungen siehe auch @ref{Programmstart}.
767 @chapter Benutzung in eigenen Programmen
769 Wie der Quelltext benutzt wird, hängt natürlich vom erzeugten Quelltext und
770 damit von den jeweiligen Quelltextbeschreibungen ab.
771 @xref{Source description}. Es kann hier deshalb nur auf die mit FlexCat
772 mitgelieferten Quelltextbeschreibungsdateien eingegangen werden.
774 Alle diese Dateien sind so aufgebaut, daß das fertige Programm auf jeden
775 Fall auch ohne die @code{locale.library} arbeitet. Üblicherweise muß
776 die @code{locale.library} eröffnet werden, aber das machen moderne
777 Compiler meist automatisch, ebenso den Aufruf der Initialisierungsroutinen.
778 Natürlich werden ohne @code{locale.library} nur die eingebauten Strings
779 aus der Katalogbeschreibung verwendet. (Die C-Quelltextbeschreibung erlaubt
780 allerdings auch eine Lokalisierung unter Workbench 2.0: Dabei wird die
781 @code{iffparse.library} benutzt, um die Kataloge quasi von Hand zu lesen.
782 @xref{C}.) Als Programmierer
783 benötigen Sie keinerlie Kenntnisse dieser Libraries, außer Sie wollen
784 eigene Quelltextbeschreibungen erzeugen.
786 Es gibt lediglich 3 Funktionen, die aufzurufen recht simpel ist:
787 @deffn {} OpenCatalog (locale, language)
788 Diese Funktion versucht, einen Katalog zu eröffnen. Das Argument
789 @code{locale} ist ein Zeiger auf eine Locale-Struktur, @code{language} ein
790 Zeiger auf einen String, der den Namen der gewünschten Sprache enthält.
791 Beide Argumente werden an die Locale-Funktion OpenCatalog übergeben und
792 sollten normalerweise immer NULL (bzw. NIL) sein, da andernfalls die
793 Voreinstellungen des Benutzers überschrieben werden. Näheres ist in den
794 AutoDocs nachzulesen.
796 Unter nicht-objektorientierten Sprachen heißt diese Funktion
797 @samp{OpenXXXCatalog}, wobei @samp{XXX} der Basisname des Programms ist.
799 Hat der Benutzer als Vorgabesprachen etwa @samp{Deutsch} und @samp{Français}
800 eingestellt und der Basisname des Programms ist @samp{XXX}, so wird
801 nacheinander nach folgenden Dateien gesucht:
803 @file{PROGDIR:Catalogs/Deutsch/XXX.catalog}
804 @file{LOCALE:Catalogs/Deutsch/XXX.catalog}
805 @file{PROGDIR:Catalogs/Français/XXX.catalog}
806 @file{LOCALE:Catalogs/Français/XXX.catalog}
808 Dabei ist @file{PROGDIR:} das aktuelle Directory des Programms. Die
809 Reihenfolge von @file{PROGDIR:} und @file{LOCALE:} kann evtl. vertauscht
810 werden, falls dadurch ein Requester wie @samp{Insert volume YYY} unterdrückt
813 OpenCatalog ist vom Typ void (für Modula2-Programmierer: Eine Prozedur),
814 liefert also kein Ergebnis.
817 @deffn {} GetString (ID)
818 Diese Funktion liefert einen Zeiger auf den Katalogstring mit der
819 angegebenen Nummer. Die ID wird in der Katalogbeschreibung definiert.
820 Es versteht sich von selbst, daß die Strings Eigentum der
821 @code{locale.library} sind und deshalb nicht verändert werden dürfen.
823 Ein Beispiel ist vielleicht nützlich. Im Beispiel aus der Katalogbeschreibung
824 wird der String @code{msgHello} definiert. Die Quelltextbeschreibungen
825 deklarieren nun eine Konstante @samp{msgHello}, der die ID repräsentiert.
826 Damit könnte der String in C so ausgegeben werden:
828 printf("%s\n", GetString(msgHello));
832 @deffn {} CloseCatalog (void)
833 Mit dieser Funktion wird der Katalog (das heißt das belegte RAM) vor dem
834 Programmende wieder freigegeben. Die Funktion kann gefahrlos zu jeder
835 Zeit aufgerufen werden, sogar wenn OpenCatalog gar nicht aufgerufen wurde.
839 * C:: FlexCat-Quelltext in C-Programmen
840 * C++:: FlexCat-Quelltext in C++-Programmen
841 * Oberon:: FlexCat-Quelltext in Oberon-Programmen
842 * Modula-2:: FlexCat-Quelltext in Modula-2-Programmen
843 * Assembler:: FlexCat-Quelltext in Assembler-Programmen
844 * E:: FlexCat-Quelltext in E-Programmen
850 @section FlexCat-Quelltext in C-Programmen
854 Der C-Quelltext besteht aus zwei Teilen: Einer @file{.c}-Datei, die einfach
855 übersetzt und mit dem Linker eingebunden wird und nicht weiter zu
856 interessieren braucht und einer @file{.h}-Datei, die vom benutzenden Programm
857 mit @samp{#include} eingebunden wird. In ihr werden die ID's der Strings
860 Die mir bekannten C-Compiler (SAS/C, Dice und gcc) erlauben das automatische
861 Eröffnen der Libraries und Kataloge, weshalb die Funktionen @code{OpenCatalog}
862 und @code{Closecatalog} hier entfallen. (Benutzer anderer Compiler müssen
863 diese Funktionen aber sehr wohl aufrufen.) Ferner ist die
864 C-Quelltextbeschreibung so angelegt, daß die @code{GetString}-Funktion bereits
865 für alle Strings bei der Initialisierung aufgerufen wird: Man kann deshalb
866 einfach @samp{msgHello} statt @samp{GetString(msgHello)} schreiben.
868 Definiert man beim Compilieren die Konstante @code{LOCALIZE_V20} (das heißt,
869 man compiliert bei gcc und Dice mit @samp{-DLOCALIZE_V20} bzw. bei SAS/C
870 mit @samp{DEF LOCALIZE_V20}) so wird
871 Quelltext erzeugt, der auch unter Workbench 2.0 Kataloge lesen kann.
872 Allerdings muß dann die @code{iffparse.library} eröffnet werden, ferner
873 ist unmittelbar nach dem Start von @code{main} aus eine Funktion
874 @code{InitXXXCatalog} aufzurufen, die als Argument den Namen der zu
875 verwendenden Sprache bekommt. (@samp{XXX} ist der Basisname des Programms.)
876 Diese Sprache muß dem Programm natürlich über eine Option wie
877 @samp{LANGUAGE Deutsch} mitgeteilt werden. Mit der @code{locale.library}
878 wird diese Möglichkeit natürlich ignoriert.
879 (Prinzipiell wäre das auch unter OS 1.3 möglich, aber ich halte eine
880 Unterstützung dieser veralteten Version des OS für nicht mehr nötig.)
882 Um diese Funktionalität zu gewähren, sind gewisse Einschränkungen nötig:
883 So ist es z.B. nicht möglich, eine @code{Locale}-Struktur bei der
884 Initialisierung anzugeben. Für 95% aller Anwendungen
885 dürfte dies aber völlig ausreichend sein, für andere Anwendungen muß man
886 eine modifizierte Quelltextbeschreibung verwenden.
888 Ein Beispiel eines so geschriebenen C-Programms findet man in
889 @ref{Uebersicht, Übersicht, Übersicht}.
896 @section FlexCat-Quelltext in C++-Programmen
900 @cindex C++_CatalogF.cc
901 @cindex C++_CatalogF.h
902 Unter C++ ist alles dank einer geeigneten Klasse extrem einfach:
903 Durch Konstruktoren und Destruktoren wird das meiste automatisch
904 erledigt. Diese Klasse ist in den Dateien @file{C++_CatalogF.cc}
905 und @file{C++_CatalogF.h} implementiert, die in @file{CatalogF.cc} und
906 @file{CatalogF.h} umbenannt und übersetzt werden sollten. Ferner
907 sollten mit Hilfe der Quelltextbeschreibungen @file{C++_cc.sd} und
908 @file{C++_h.sd} zwei weitere Dateien erzeugt werden: Erstere enthält
909 die Strings, letztere wird mit @code{#include} im eigentlichen Programm
910 eingebunden und enthält die nötigen Deklarationen.
912 Abschließend ein Beispiel eines C++-Programms:
914 #include <iostream.h>
917 #include <clib/exec_protos.h>
919 #include "CatalogF.h"
920 #include "HelloLocalWorld_Cat.h"
922 struct LocaleBase *LocaleBase = 0;
925 @{ // Die Library muß hier eröffnet werden, auch wenn der Compiler
926 // das automatisch kann. @strong{Kein} Aussteigen, falls die
927 // Library nicht eröffnet werden kann: Dann werden einfach die
928 // eingebauten Strings verwendet.
929 LocaleBase = (struct LocaleBase *) OpenLibrary("locale.library", 38);
931 const CatalogF cat(0, 0, HelloLocalWorld_ARGS);
933 cout >> cat.GetString(msgHelloLocalWorld);
936 CloseLibrary(LocaleBase);
939 Für den gcc ist eine Modifikation der @file{libauto.a} verfügbar, die sogar
940 die Eröffnung der Locale.library überflüssig macht.
945 @section FlexCat-Quelltext in Oberon-Programmen
947 @cindex Oberon_V38.sd
948 @cindex Oberon_V39.sd
949 @cindex AmigaOberon.sd
951 Es gibt unterschiedliche Quelltextbeschreibungen:
952 @file{AmigaOberon.sd} ist für die aktuelle Version des AmigaOberon-Compilers,
953 @file{Oberon_V39.sd} für ältere Versionen dieses Compilers gedacht.
954 @file{Oberon_V38.sd} verwendet das von @file{Locale.mod} von
955 Hartmut Goebel. @file{Oberon-A.sd} ist natürlich für den gleichnamigen
958 Die Prototypen der Funktionen sind:
960 XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
961 XXX.GetString(num: LONGINT): Exec.StrPtr;
965 Dabei ist @samp{XXX} jeweils der Basisname aus der Quelltextbeschreibung.
966 @xref{Source description}.
968 Zum Schluß noch ein Beispiel eines Programms, das den von FlexCat erzeugten
971 MODULE HelloLocalWorld;
973 IMPORT x:=HelloLocalWorld_Cat; Dos;
976 x.OpenCatalog(NIL, "");
978 Dos.PrintF("%s\n", x.GetString(x.msgHello));
980 (* Katalog wird beim Programmende automatisch *)
988 @section Flexcat-Quelltext in Modula-2-Programmen
990 @cindex Modula2Def.sd
991 @cindex Modula2Mod.sd
992 Wie Oberon unterstützt Modula-2 ein Modulkonzept, die Funktionsnamen sind
993 also dieselben. Da Modula je ein Definitions- und Implementationsmodul
994 benötigt, müssen diese durch die Quelltextbeschreibungen
995 @file{Modula2Def.sd} bzw. @file{Modula2Mod.sd} erzeugt werden, die an den
996 M2Amiga-Compiler angepasst sind. Außerdem wird die Definitionsdatei
997 @file{OptLocaleL.def} benötigt, die mit dem Update auf M2Amiga v4.3
1000 Die Prototypen der Funktionen sind:
1002 PROCEDURE OpenCatalog(loc : ld.LocalePtr;
1003 language : ARRAY OF CHAR);
1004 PROCEDURE CloseCatalog();
1005 PROCEDURE GetString(num : LONGINT) : ld.StrPtr;
1008 Zum Schlu"s noch ein Beispiel eines Programms, das den von FlexCat
1009 erzeugten Quelltext verwendet:
1011 MODULE HelloLocalWorld;
1013 IMPORT hl: HelloLocalWorldLocale,
1017 hl.OpenCatalog(NIL, "");
1019 io.WriteString(hl.GetString(hl.msgHello)); io.WriteLn;
1022 END HelloLocalWorld.
1029 @section FlexCat-Quelltext in Assembler-Programmen
1031 @cindex AztecAs_asm.sd
1032 @cindex AztecAs_i.sd
1035 Es gibt Quelltextbeschreibungen für die Assembler von Aztec-C bzw. SAS/C.
1036 Beide sind im wesentlichen identisch, vor allem der SAS-Assembler dürfte
1037 sich kaum von verbreiteten Assemblern unterscheiden. Es sollte also kein
1038 großes Problem sein, daraus eine eigene Quelltextbeschreibung zu machen.
1039 Der Quelltext besteht aus zwei Teilen: Einer @file{.asm}- bzw.
1040 @file{.a}-Datei, die einfach übersetzt und mit dem Linker eingebunden
1041 wird und nicht weiter zu interessieren braucht und einer @file{.i}-Datei,
1042 die vom benutzenden Programm mit @samp{include} eingebunden wird. In ihr
1043 werden die ID's der Strings definiert.
1045 Um theoretisch auch das gleichzeitige Eröffnen mehrerer Kataloge zu
1046 ermöglichen, tragen die FlexCat-Funktionen etwas geänderte Namen, nämlich
1047 @samp{OpenXXXCatalog}, @samp{CloseXXXCatalog} und @samp{GetXXXString}. Dabei
1048 ist @samp{XXX} der Basisname aus der Quelltextbeschreibung. Das Konzept ist
1049 von der @code{GadToolsBox} übernommen und meines Erachtens bewährt.
1050 @xref{Source description}.
1052 Die Funktionen liefern wie üblich das Ergebnis in d0 und sichern die
1053 Register d2-d7 und a2-a7. OpenCatalog erwartet seine Argumente in a0
1054 (Zeiger auf Locale-Struktur) und in a1 (Zeiger auf String mit zu
1055 verwendender Sprache). Wie schon erwähnt, sollten diese Argumente im
1056 Normalfall immer NULL sein. GetString erwartet in a0 einen Zeiger. Auf was
1057 er zeigt braucht ebenfalls nicht zu interessieren.
1059 Zum Schluß noch ein Beispiel eines Programms, das FlexCat verwendet.
1061 * HelloLocalWorld.asm
1063 include "HelloLocalWorld_Cat.i"
1064 /* Enthält xref OpenHelloLocalWorldCatalog usw. */
1066 xref _LVOOpenLibrary
1067 xref _LVOCloseLibrary
1071 LocNam: dc.b "locale.library",0
1072 dc.l _LocaleBase,4 ; Dieser Name ist obligatorisch
1076 main: move.l #38,d0 ; Locale eröffnen
1078 move.l _AbsExecBase.a6
1079 jsr _LVOOpenLibrary(a6)
1080 * KEIN Abbruch, falls OpenLibrary() nicht erfolgreich! (Natürlich nur,
1081 * wenn Locale-Funktionen nicht anderweitig benutzt werden.
1085 jsr OpenHelloLocalWorldCatalog ; Katalog eröffnen
1087 lea.l msgHello,a0 ; Zeiger auf String holen
1088 jsr GetHelloLocalWorldString
1089 jsr PrintD0 ; und ausgeben
1091 jsr CloseHelloLocalWorldCatalog ; Katalog schließen
1092 move.l _LocaleBase,a1 ; Locale evtl. schließen
1105 @section FlexCat-Quelltext in E-Programmen
1109 Seit der Version 3.0 erlaubt E das Aufteilen von Programmen in separate
1110 Module. Im Folgenden wird nur die Quelltextbeschreibung @file{E30b.sd}
1111 beschrieben, die ab E3.0b funktionieren sollte. (Version 3.0a enthält
1112 signifikante Fehler, für frühere Versionen gibt es @file{E21b.sd}, das
1113 allerdings die Einbindung des von FlexCat erzeugten Quelltextes in den
1114 eigentlichen Quelltext von Hand erfordert.)
1116 @file{E30b.sd} erzeugt ein Modul @file{Locale}, das eine Variable
1117 namens @code{cat} vom Typ @samp{catalog_XXX} bereit stellt. (Wobei
1118 @samp{XXX} der Basisname aus der Quelltextbeschreibung ist,
1119 @pxref{Source description}) Eine Datei @file{HelloLocalWorld.e}
1123 -> Einbindung des Moduls
1125 DEF cat : PTR TO catalog_HelloLocalWorld
1126 -> Diese Variable enthält die ganzen Katalogstrings und stellt
1127 -> einige Methoden bereit. Sie muß in jedem Modul deklariert
1128 -> werden, das den Katalog verwendet, allerdings nur im
1129 -> Hauptmodul initialisiert werden.
1133 localebase := OpenLibrary('locale.library', 0)
1134 -> Locale.library eröffnen; @strong{Kein} Abbruch, falls
1135 -> nicht vorhanden! (In diesem Fall werden die eingebauten
1136 -> Strings verwendet.
1140 -> Diese Initialisierung wird (wie schon erwähnt) nur im
1141 -> Hauptmodul durchgeführt.
1143 WriteF('\s\n', cat.msg_Hello_world.getstr())
1144 -> cat.msg_Hello_world ist einer der in cat enthaltenen
1145 -> Strings. Dieser stellt eine Methode getstr() bereit,
1146 -> die den Katalog liest und einen Zeiger auf den zu
1147 -> verwendenden String liefert.
1150 IF localebase THEN CloseLibrary(localebase)
1159 @unnumbered Weiterentwicklung des Programms
1161 @cindex Weiterentwicklung
1163 Ich beabsichtige eigentlich nicht, das Programm wesentlich
1164 weiterzuentwickeln, denke auch nicht, daß das nötig sein wird, bin aber
1165 natürlich trotzdem für jegliche Anregung, Vorschläge oder notfalls auch
1166 Kritik offen. Was ich auf jeden Fall gerne machen werde, sind andere
1167 Stringtypen, falls sich diese für andere Programmiersprachen als notwendig
1170 Ferner wäre ich auf jeden Fall dankbar für weitere Quelltextbeschreibungen
1171 und würde diese gerne in einer späteren Version öffnetlich zugänglich
1172 machen - egal, welche Programmiersprache oder mit welchen Erweiterungen.
1173 Voraussetzung ist natürlich, daß der von diesen Quelltextbeschreibungen
1174 erzeugte Code in einem laufenden Programm erfolgreich erprobt wurde.
1176 Ebenso dankbar wäre ich natürlich auch für neue Kataloge. Es genügt der
1177 Eintrag der entsprechenden Strings in der Datei @file{NewCatalogs.ct}.
1178 Wie das geht, sollte nach der Lektüre dieser Dokumentation hoffentlich klar
1184 @unnumbered Danksagungen
1185 @cindex Danksagungen
1189 @item Albert Weinert
1190 für KitCat, den Vorgänger von FlexCat, der mir gute Dienste geleistet hat,
1191 aber irgendwann eben nicht flexibel genug war sowie für die
1192 Oberon-Quelltextbeschreibungen.
1194 @item Reinhard Spisser und Sebastiano Vigna
1195 für die Amiga-Version von texinfo, mit der diese Dokumentation geschrieben
1198 @item Der Free Software Foundation
1199 für die Urversion von texinfo und für viele andere hervorragende Programme.
1202 für DICE und besonders für DME.
1204 @item Alessandro Galassi
1205 für den italienischen Katalog.
1207 @item Lionel Vintenat
1208 für die E-Quelltextbeschreibung und ihre Dokumentation, den französichen
1209 Katalog und Fehlermeldungen.
1211 @item Antonio Joaquín Gomez Gonzalez (u0868551@@oboe.etsiig.uniovi.es)
1212 für die C++-Quelltextbeschreibung, den spanischen Katalog, die Übersetzung
1213 der Dokumentation in Spanisch sowie für den guten Tip über die schnellere
1216 @item Olaf Peters (op@@hb2.maus.de)
1217 für die Modula-2-Quelltextbeschreibung.
1219 @item Russ Steffen (steffen@@uwstout.edu)
1220 für die Anregung der FLEXCAT_SDDIR-Variablen.
1222 @item Lauri Aalto (kilroy@@tolsun.oulu.fi)
1223 für die finnischen Quelltextübersetzungen.
1225 @item Marcin Orlowski (carlos@@felix.univ.szczecin.pl)
1226 für die polnischen Quelltextübersetzungen
1228 @item Udo Schuermann (walrus@@wam.umd.edu)
1229 für die Vorschläge der WARNCTGAPS-Option und das ##chunk-Kommando.
1231 @item Christian Hoj (cbh@@vision.auc.dk)
1232 für die dänische Quelltextbeschreibung
1234 @item Hartmut Goebel (hartmut@@oberon.nbg.sub.org)
1235 für den Hinweis auf die Enforcerhits und den Vorschlag mit
1238 @item Den Leuten von #AmigaGer
1239 für die Beantwortung vieler dummer
1240 Fragen und für viele Augenblicke erfreulich
1241 ungezügelten Schwachsinns :-), z.B.
1242 stefanb (Stefan Becker), PowerStat (Kai Hoffmann), \
1243 ill (Markus Illenseer), Quarvon (Jürgen Lang), ZZA (Bernhard Möllemann),
1244 Tron (Mathias Scheler), mungo (Ignatios Souvlatzis), \
1245 jow (Jürgen Weinelt) und Stargazer (Petra Zeidler).
1248 für den Amiga und für die Kickstart 2.0 :-) Macht weiter mit der Kiste, dann
1249 bin ich vielleicht auch die nächsten 8 Jahre Amiga-Benutzer!