Test initialisation of MUIA_List_AdjustWidth and MUIA_List_AdjustHeight, and
[AROS.git] / tools / flexcat / dist / FlexCat / Docs / FlexCat_english.guide
blob67285a47c5a34836bf4d3ba1c0834fc06be8797b
1 @database Docs/FlexCat_english.guide
3 @Master Catalogs_Src/FlexCat_english.texinfo
5 @Width 76
8 This is the AmigaGuide®  file Docs/FlexCat_english.guide, produced by Makeinfo-1.68 from 
9 the input file Catalogs_Src/FlexCat_english.texinfo.
11 @node Main "FlexCat_english.guide"
12 @next "Disclaimer"
14 FlexCat V2.6 Documentation
15 **************************
17    This file describes the Usage of FlexCat V2.6, a program which generates
18 catalogs and the source to handle them. FlexCat works similar to @{b}CatComp@{ub}
19 and @{b}KitCat@{ub}, but differs in generating any source you want. This is done by
20 using the so called @{b}Source descriptions@{ub}, which are a template for the code
21 to generate. They can be edited and hence adapted to any programming
22 language and individual needs. (Hopefully!)
25 General:
27  @{" Disclaimer          " link "Disclaimer"}  Copyrights, (NO) warranty
28  @{" Overview            " link "Overview"}  What is FlexCat?
29  @{" Installation        " link "Installation"}  How can I get it working?
31 Using FlexCat:
33  @{" Program start       " link "Program start"}  Calling FlexCat from the CLI
34  @{" Preferences         " link "Preferences"}  Changing FlexCat default behaviour
35  @{" Catalog description " link "Catalog description"}  Catalog description files (<.cd>-files)
36  @{" Catalog translation " link "Catalog translation"}  Catalog translation files (<.ct>-files)
37  @{" Source description  " link "Source description"}  Source description (<.sd>-files)
38  @{" Using FlexCat source " link "Using FlexCat source"}  Using FlexCat source in own programs
40 Unnecessities:
42  @{" Future              " link "Future"}  Further development of FlexCat
43  @{" Support             " link "Support"}  Where to look for updates
44  @{" History             " link "History"}  History of development
45  @{" Credits             " link "Credits"}  What I always wanted to say...
46  @{" Index               " link "Index"}  Where you find what you are never looking for
49 @endnode
51 @node "Disclaimer" "FlexCat_english.guide/Disclaimer"
52 @next "Overview"
53 @prev "Main"
54 @toc "Main"
56 Copyright and other legal stuff
57 *******************************
59      Copyright (C) 1993-1999 Jochen Wiedmann and Marcin Orlowski
60      
61                  Jochen Wiedmann
62                  Am Eisteich 9
63                  72555 Metzingen
64                  Deutschland
65      
66      
67                  Since v1.8 program is developed by
68      
69                  Marcin Orlowski
70                  ul. Radomska 38
71                  71-002 Szczecin
72                  Poland
73      
74                  carlos@amiga.com.pl
75                  http://amiga.com.pl/flexcat/
77    Permission is granted to make and distribute verbatim copies of this
78 manual and the program FlexCat.
80    The author gives @{b}absolutely no@{ub} warranty that the program described in
81 this documentation and the results produced by it are correct. The author
82 cannot be held responsible for @{b}any@{ub} damage resulting from the use of this
83 software.
86 @endnode
88 @node "Overview" "FlexCat_english.guide/Overview"
89 @next "Installation"
90 @prev "Disclaimer"
91 @toc "Main"
93 Overview
94 ********
96    Since Workbench 2.1 the Amiga offers a rather pleasant system of using
97 programs in different languages: The @{b}locale.library@{ub}. (This is called
98 localizing, that's what the name's for.)
100    The idea is simple: You select a language, the english in most cases and
101 write your program in the same manner as you did without localizing, except
102 that constant strings are replaced by certain function calls. Another
103 function call makes it possible that the user selects another language when
104 the program starts. (The latter function call loads an external file, the
105 so called @{b}catalog@{ub} and makes the former to read the strings from the catalog
106 instead of using the predefined strings.)
108    These catalogs are independent from the program. All you need to do for
109 adding another language is to create a new catalog file and this is
110 possible at any time without changing the program.
112    But there are additional tasks for the programmer: He needs to create the
113 catalogs, the predefined strings and some source to handle them all. (The
114 functions that are mentioned above.) FlexCat is designed to make this in an
115 easy and nearly automatic manner without losing flexibility especially in
116 creating the source. An example should make this clear:
118    Lets assume that we want to write a @{b}HelloLocalWorld.c@{ub}. Our final program
119 will look like this:
120          #include <stdio.h>
121          #include <stdlib.h>
122          #include <HelloLocalWorld_Cat.h>  /*  You @{b}must@{ub} include this! */
123      
124          void main(int argc, char *argv[])
125          {
126            printf("%s\n", msgHello);
127          }
129 Note that this is quite the same as the original @{b}HelloWorld.c@{ub} except for
130 replacing the string "Hello, world!" with a constant @{b}msgHello@{ub}.
132    These constants and the related strings are defined in a so called
133 @{b}Catalog description@{ub} file. See @{"Catalog description" link "Catalog description"}. You always start by
134 creating such a file called @{b}HelloLocalWorld.cd@{ub}, which could look like this:
135          ;   Comments are allowed, of course! Each line beginning with a
136          ;   semicolon is assumed to be a comment
137          ;
138          ;   The language of the builtin strings:
139          #language english
140          ;
141          ;   The catalog version, used for a call to Locale/OpenCatalog().
142          ;   This is different to Exec/OpenLibrary(): 0 means any catalog
143          ;   version, other numbers must match exactly!
144          #version 0
145          ;
146          ;   This defines a string and the ID which allows to use it.
147          ;   The number 4 says, that this string must not be shorter than
148          ;   4 characters.
149          msgHello (/4/)
150          Hello, world!
152    By using FlexCat you create another two files from the catalog
153 description: The include file @{b}HelloLocalWorld_Cat.h@{ub} defines the constants
154 and the @{b}HelloLocalWorld_Cat.c@{ub} contains an array of strings and some
155 initializing functions.  You don't need to know what they do, just use
156 them. Especially you don't need to know anything about the @{b}locale.library@{ub}!
158    However, you might be interested, how these files look or even more, you
159 might want to modify them. This is the difference between FlexCat and other
160 catalog generators: With FlexCat you are not bound to a certain builtin
161 format these files have.  Instead it uses external template files, so
162 called @{b}Source descriptions@{ub}. This makes it possible, for example, to allow
163 using catalogs with AmigaDOS 2.0. See @{"Source description" link "Source description"}.  If you use the
164 source descriptions from the FlexCat distribution you can create the source
165 files with the following commands:
166          @{b}FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c.sd@{ub}
167          @{b}FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd@{ub}
169    When your program is ready, you use FlexCat again to create so called
170 @{b}Catalog translation@{ub} files, one for each language you would like to support.
171 (Except english, which is builtin.) See @{"Catalog translation" link "Catalog translation"}.  Lets create
172 a german catalog translation:
173          @{b}FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct@{ub}
175 This file would now look as follow:
176          ## version
177          ## language
178          ## codeset 0
179          ;   Comments ar eallowed, of course! Each line beginning with a
180          ;   semicolon is assumed to be a comment
181          ;
182          ;   The language of the builtin strings:
183          ;
184          ;   The catalog version, used for a call to Locale/OpenCatalog().
185          ;   This is different to Exec/OpenLibrary(): 0 means any catalog
186          ;   version, other numbers must match exactly!
187          ;
188          ;   This defines a string and the ID which allows to use it.
189          ;   The number 4 says, that this string must not be shorter than
190          ;   4 characters.
191          msgHello
192      
193          ;Hello, world!
195 You see, it looks much like the catalog descriptions. FlexCat includes the
196 comments from the catalog description, even where it is meaningless: Note
197 the comment on the string length which shouldn't appear here as these
198 informations must be in the catalog description only. All you have to do
199 now is to fill in the informations on the version (a typical version string
200 like @{b}$VER: Deutsch.catalog 1.2 (06.03.98)@{ub} is expected), the language of the
201 catalog translation (@{b}Deutsch@{ub} for german here), the codeset (which should
202 always be 0 for now, see Locale/OpenCatalog() for details) and of course
203 the strings itself. FlexCat includes the original strings as comments, so
204 you always know what to fill in.  Finally you create the catalogs with
205 commands like
206          @{b}FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog@{ub}
208 Note, that you don't need the program itself or the source files created
209 with FlexCat for the catalogs! You can create new catalogs at any time.  It
210 is usual to supply distributions with a file FlexCat.ct, so users can
211 create own catalogs.
213    But what happens if you change the program later? Just edit the catalog
214 description and use FlexCat to update the catalog translations:
215          @{b}FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct@{ub}
217 All you need to do now is to enter new strings if needed.
220 @endnode
222 @node "Installation" "FlexCat_english.guide/Installation"
223 @next "Program start"
224 @prev "Overview"
225 @toc "Main"
227 Installation
228 ************
230    FlexCat is written in pure Ansi-C (except for the localization), hence it
231 should run on any Amiga and hopefully on other machines after recompiling.
232 (The localizing is commented out in that case.) This holds for the created
233 programs too: FlexCat is written using itself. All distributed source
234 descriptions should create programs running on any Amiga and even any
235 machine. (Of course you must ensure that the variable LocaleBase has the
236 value @{b}NULL@{ub} in the latter case.) Localizing, however, is possible beginning
237 with Workbench 2.1 because the @{b}locale.library@{ub} isn't available below.
239    It is not impossible to offer localizing without the @{b}locale.library@{ub}: The
240 source description files @{b}C_c_V20.sd@{ub} and @{b}C_h_V20.sd@{ub} give an example, where
241 the @{b}iffparse.library@{ub} is used to replace the @{b}locale.library@{ub}, if it is not
242 available. This gives Localizing for Workbench 2.0. See @{"C" link "C"}.
244    Installing FlexCat is simple: Just copy the program to a directory in
245 your search path and select a place for the source descriptions you need.
246 (These are the files called something like @{b}xx_yy.sd@{ub}, where @{b}xx@{ub} is the
247 programming language.) Probably you want to set the environment variable
248 FLEXCAT.PREFS or FLEXCAT_SDDIR. See @{"Program start" link "Program start"}.
250    If you want to use FlexCat in another language than the english you need
251 to copy the respective catalog files too.  E.g. for the german language
252 copy the file @{b}Catalogs/Deutsch/FlexCat.catalog@{ub} to @{b}Locale:Catalogs/Deutsch/@{ub}
253 or to @{b}PROGDIR:Catalogs/Deutsch/@{ub} , where @{b}PROGDIR:@{ub} is FlexCat's program
254 directory. See @{"Using FlexCat source" link "Using FlexCat source"}.
257 @endnode
259 @node "Program start" "FlexCat_english.guide/Program start"
260 @next "Preferences"
261 @prev "Installation"
262 @toc "Main"
264 Calling FlexCat from the CLI
265 ****************************
267    FlexCat is a CLI based program and doesn't operate from the workbench.
268 It's calling syntax is
270      FlexCat CDFILE/A,CTFILE,CATALOG/K,NEWCTFILE/K,SOURCES/M,WARNCTGAPS/S,
271              NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,NOLANGTOLOWER/S,NOBUFFEREDIO/S,
272              MODIFIED/S,QUIET/S,COPYMSGNEW/S,OLDMSGNEW/K
274 Please note, that due to FlexCat portability, the argument parsing is not
275 quite standard. Most notably, the only keywords you can (and must) specify
276 are CATALOG and NEWCTFILE (those of type "/K"), others should be ommited,
277 or be badly taken as argument itself. This is going to change probably in
278 the next release.
280    Since v1.9, FlexCat implements simple preferences mechanism, which allows
281 you to change default behaviour of FlexCat. See @{"Preferences" link "Preferences"}.
283    And now, the arguments meaning:
284 @{b}CDFILE@{ub}
285      is the name of a catalog description to be read. This is always needed.
286      Please note, that the base name of the source description is created
287      from it making this case significant. See @{"Source description" link "Source description"}.
289 @{b}CTFILE@{ub}
290      is the name of a catalog translation file to be read. This is needed
291      for creating catalogs or for updating an old catalog translation file
292      using the NEWCTFILE argument: FlexCat reads the old file and the
293      catalog description and creates a new catalog translation file
294      containing the old strings and possibly some empty lines for new
295      strings.
297 @{b}CATALOG@{ub}
298      is the name of a catalog file to be created. This argument requires
299      giving CTFILE as well.
301 @{b}NEWCTFILE@{ub}
302      is the name of a catalog translation file to create. FlexCat reads
303      strings from CTFILE, if this is given, strings missing in the catalog
304      translation are replaced by empty lines. (The new catalog translation
305      will contain only empty lines as strings, if CTFILE is omitted.)
307 @{b}SOURCES@{ub}
308      are the names of source files to be created. These should be given in
309      the form @{b}source=template@{ub} where @{b}source@{ub} is the file to create and
310      @{b}template@{ub} is the name of a source description file to be scanned.
312      If the source description isn't found, FlexCat tries to open a file
313      with the same name in the directory @{b}PROGDIR:lib@{ub}. (The subdirectory @{b}lib@{ub}
314      of the directory where the binary FlexCat itself lives.)  You can
315      overwrite this default with the environment variable FLEXCAT_SDDIR.
316      Example:
317               @{b}FlexCat FlexCat.cd FlexCat_Cat.c=Templates/C_c_V20.sd@{ub}
319      would look for a file @{b}Templates/C_c_V20.sd@{ub} in the current directory
320      first. If this wouldn't be found and no variable FLEXCAT_SDDIR would
321      be present, FlexCat would look for @{b}PROGDIR:lib/Templates/C_c_V20.sd@{ub}.
322      But if FLEXCAT_SDDIR would exist and have the value @{b}Work:Flexcat@{ub}, for
323      example, then the existence of @{b}Work:FlexCat/Templates/C_c_V20.sd@{ub} would
324      be checked.
326 @{b}WARNCTGAPS@{ub}
327      usually FlexCat doesn't warn about symbols missing in the catalog
328      translation. This option will switch on such warnings.
330 @{b}NOOPTIM@{ub}
331      Normally, if both strings (source in #?.cd file and translation in
332      #?.ct one) are equall, FlexCat assumes there's no need to write it to
333      the catalog file as it should be in program built-in string table
334      already, from which it will be taken.  But if you want, for some
335      reasons these strings to be written (or in another words:  if you want
336      all strings to be written) use NOOPTIM.
338 @{b}FILL@{ub}
339      This feature is highly useful for the translators.  Normally, while
340      working on the translation you got some strings still empty as you are
341      working on them.  But it obvious you want to check currently
342      translated strings.  Unfortunately all catalog creators including
343      FlexCat write all empty strings too, which cause empty buttons or
344      simmilar things to happen.  Switch to forbid empty strings is not a
345      good solution because prevents you from having such if you need.  Also
346      some bad written program may requre all strings to be in the catalog
347      (even empty) e.g.  due to lack of built-in strings.  Using FILL option
348      you force FlexCat to write source string (from @{b}#?.cd@{ub} file) everytime
349      it catch translation to be empty or be not present at all.  NOTE:
350      this is only for testing purposes.  Final catalogs should always be
351      created with no FILL swich used!
353 @{b}FLUSH@{ub}
354      This switch is useful when you are translate and test your translation
355      simultanously. As AmigaOS caches catalogs (as well as libraries,
356      fonts, devices etc) in memory, you need to flush it (e.g. using
357      @{b}C:AVAIL FLUSH@{ub} command) every time you want new catalog to be reread
358      from the disk (instead of using cached copy). If you specify this
359      switch while creating the catalog, FlexCat will automatically flush
360      all unused things from the memory. NOTE: FLUSH works only when you
361      create new catalog. Otherwise it will be ignored.  Example:
362               @{b}FlexCat Test.cd Test.ct CATALOG Test.catalog FLUSH@{ub}
364 @{b}NOBEEP@{ub}
365      Since version 1.9, FlexCat will do DisplayBeep() to notice you about
366      the problems it encountered. Such behaviour is very useful when you
367      call FlexCat from environment without standard output (e.g. you launch
368      the script form the DOpus or other tool, etc). Of course you may don't
369      like these beeps (however FlexCat is smart enough and beep only once,
370      even you receive 20 warrnings, so don't be afraid of any
371      beep-bombing). In such case use NOBEEP switch to shut FlexCat up.
373 @{b}NOLANGTOLOWER@{ub}
374      Normally, FlexCat makes #language entry argument (from #?.ct file)
375      lowercased using utility.library call. Utility library calls
376      locale.library if present, but I was reported that due to broken
377      conversion table in some locales (czech for instance), it leads to
378      incorrect strings. So this switch is the workaround for that problem.
379      I strongly suggest to force your locale author to fix that bug, as
380      some tools may also give you wrong results. And rememeber to keep
381      #language name lowercased manually, if you need to use that switch
382      (but don't use it unless really necessary).
384 @{b}NOBUFFEREDIO@{ub}
385      Buffered IO makes running faster the most applications that often do
386      I/O.  So does FlexCat 2.0+. The speed up is mostly noticeable on
387      systems using pooling devices (like (E)IDE), but the gain will also be
388      reached on DMA bases systems (SCSI). FlexCat uses two 2KB buffers, so
389      if you really think that's not the feature you like, that's the way to
390      disable it.
392 @{b}MODIFIED@{ub}
393      This option tells FlexCat to compile the catalog only then, when the
394      source #?.cd or #?.ct file were changed since last catalog creation.
395      When catalog file is older than its sources, FlexCat just quits. This
396      option is very useful when you want to create kind of shell scripts to
397      process and compile more catalogs at once (e.g. for OS localisation or
398      programs like DOpus5), and don't want to waste your time for
399      recompilation of nonmodified catalogs.
401               @{b}FlexCat File.cd File.ct CATALOG File.catalog MODIFIED@{ub}
403 @{b}QUIET@{ub}
404      Tells FlexCat to keep its mouth shut unless really necessary.  It
405      means that you won't see any warning messages.  Errors will be
406      reported.
408               @{b}FlexCat File.cd File.ct QUIET@{ub}
410 @{b}COPYMSGNEW@{ub}
411      While updating catalog translation file with new #?.cd file, FlexCat
412      usually marks newly added strings with ***NEW*** string (see the
413      Preferences related chapter to find out how to customize this string),
414      which is very useful and lets you easily catch all the new things that
415      had appeared since last release. Unfortunately, previous versions of
416      FlexCat (pre 2.2) didn't copy those markers from old #?.ct to updated
417      one, which forced user to either update only completely translated
418      #?.ct files which didn't recuire them any longer, or to keep them by
419      hand in any way. This was quite annoing, so v2.2 comes with the
420      solution for that problem - FlexCat is now aware of presence of such
421      markers and when this option is turned on, it simply copies them form
422      old #?.ct to updated one.
424               @{b}FlexCat New.cd Old.ct NEWCTFILE Updated.ct COPYMSGNEW@{ub}
426      By default, COPYMSGNEW searches for ***NEW*** string and treats it as
427      new string marker. But if you were using something different than
428      default string, you need to specify it using OLDNEWMSG, otherwise
429      FlexCat won't catch them:
431               @{b}FlexCat New.cd Old.ct NEWCTFILE Updated.ct COPYMSGNEW OLDMSGNEW=**Neu**@{ub}
433 @{b}OLDNEWMSG@{ub}
434      This option needs to be used together with COPYMSGNEW to take effect.
435      By default, COPYMSGNEW searches for ***NEW*** string and treats it as
436      new string marker. But if you were using something different than
437      default string, you need to specify it using OLDNEWMSG, otherwise
438      FlexCat won't catch them:
440               @{b}FlexCat New.cd Old.ct NEWCTFILE Updated.ct COPYMSGNEW OLDMSGNEW=**Neu**@{ub}
442 @{b}NOSPACE@{ub}
443      When the #?.ct file is created by FlexCat, the original string is
444      always placed as the comment, which is a must-have reference for doing
445      further translation. By default, FlexCat writes those in the following
446      way:
448               @{b}; this_is_original_string@{ub}
450      As some people does not like that extra space between ';' and the text
451      itself, using NOSPACE switch may appear the cure. When this option is
452      specified (either in command line or in prefs file), your comments
453      will look like the one below:
455               @{b};this_is_original_string@{ub}
457    For further examples of command lines see @{"Overview" link "Overview"}.
460 @endnode
462 @node "Preferences" "FlexCat_english.guide/Preferences"
463 @next "Catalog description"
464 @prev "Program start"
465 @toc "Main"
467 Changing default behaviour of FlexCat
468 *************************************
470    Since version 1.9 FlexCat implements simple preference mechanism.  By
471 using environmental variable FLEXCAT.PREFS you can change program's default
472 behaviour.
474    Variable FLEXCAT.PREFS is parsed using dos.library ReadArgs() call, thus
475 all switches should be typed in one line with space as switch separator.
476 The preferences template looks as follow:
478      SDDIR/K,NEW_MSG/K,WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,QUIET/S,
479      COPYMSGNEW/S,OLDMSGNEW/K/,NOSPACE/S
481 @{b}NEW_MSG@{ub}
482      can be used to customize the text, FlexCat uses to mark new strings
483      apparing while updating the catalog translation file (using new
484      description file and old translation). The default string is ***NEW***.
486      For detailed information about other tags, please read the @{"Program start" link "Program start"}
487      chapter.
489      Note concerning SDDIR: while creating source file FlexCat firstly check
490      the current dir, then directory set in preferences. If it still fails,
491      it read FLEXCAT_SDDIR variable and finally the @{b}"PROGDIR:lib/"@{ub} drawer.
492      So using both preferences variable and FLEXCAT_SDDIR you can use two
493      custom descriptors' drawers simultaneously.
496 @endnode
498 @node "Catalog description" "FlexCat_english.guide/Catalog description"
499 @next "Catalog translation"
500 @prev "Preferences"
501 @toc "Main"
503 Catalog description files
504 *************************
506    A catalog description file contains four kinds of lines.
508 @{b}Comment lines@{ub}
509      Any line beginning with a semicolon is assumed to be a comment line,
510      hence ignored. (The string lines below are an exception. These may
511      begin with a semicolon.)
513 @{b}Command lines@{ub}
514      Any line beginning with a '#' (with the same exception as above) are
515      assumed to be command lines. Possible commands are:
516     @{b}#language <str>@{ub}
517           gives the programs default language, the language of the strings
518           in the catalog description. Default is @{b}#language english@{ub}.
520     @{b}#version <num>@{ub}
521           gives the version number of catalogs to be opened. Note that this
522           number must match exact and not be same or higher as in
523           `Exec/OpenLibrary'.  An exception is the number 0, which accepts
524           any catalog. Default is @{b}#version 0@{ub}. See @{b}Locale/OpenCatalog@{ub} for
525           further information on catalog language and version.
527     @{b}#lengthbytes <num>@{ub}
528           Instructs FlexCat to put the given number of bytes before a
529           string containing its length. The length is the number of bytes
530           in the string without length bytes and a trailing @{b}NUL@{ub} byte.
531           (Catalog files and hence catalog strings will have a trailing @{b}NUL@{ub}
532           byte. This is not always true for the default strings, depending
533           on the source description file.)  @{b}<num>@{ub} must be between 0 and
534           sizeof(long)=4, Default is @{b}#lengthbytes 0@{ub}.
536     @{b}#basename <str>@{ub}
537           Sets the basename of the source description. See
538           @{"Source description" link "Source description"}.  This overwrites the basename from the
539           command line argument CDFILE.  See @{"Program start" link "Program start"}.  Commands are
540      case insensitive.
542 @{b}Description lines@{ub}
543      declare a string. They look like @{b}IDSTR (id/minlen/maxlen)@{ub} where @{b}IDSTR@{ub}
544      is a identifier (a string consisting of the characters a-z,A-Z and
545      0-9), @{b}id@{ub} is a unique number (from now on called ID), @{b}minlen@{ub} and @{b}maxlen@{ub}
546      are the strings minimum and maximum length, respectively. The latter
547      three may be missing (but not the characters @{b}(//)@{ub}!) in which case
548      FlexCat chooses a number and makes no restrictions on the string
549      length.  Better don't use the ID's, if you don't need. The lines
550      following are the
552 @{b}String lines@{ub}
553      containing the string itself and nothing else. These may contain
554      certain control characters beginning with a backslash:
555     @{b}\b@{ub}
556           Backspace (Ascii 8)
558     @{b}\c@{ub}
559           Control Sequence Introducer (Ascii 155)
561     @{b}\e@{ub}
562           Escape (Ascii 27)
564     @{b}\f@{ub}
565           Form Feed (Ascii 12)
567     @{b}\g@{ub}
568           Display beep (Ascii 7)
570     @{b}\n@{ub}
571           Line Feed, newline (Ascii 10)
573     @{b}\r@{ub}
574           Carriage Return (Ascii 13)
576     @{b}\t@{ub}
577           Tab (Ascii 9)
579     @{b}\v@{ub}
580           Vertical tab (Ascii 11)
582     @{b}\)@{ub}
583           The trailing bracket which is possibly needed as part of a @{b}(..)@{ub}
584           sequence, see @{"Source description" link "Source description"}.
586     @{b}\\ @{ub}
587           The backslash itself
589     @{b}\xHH@{ub}
590           The character given by the ascii code @{b}HH@{ub}, where @{b}HH@{ub} are hex digits.
592     @{b}\OOO@{ub}
593           The character given by the ascii code @{b}OOO@{ub}, where @{b}OOO@{ub} are octal
594           digits.  Finally a single backslash at the end of the line causes
595      concatening the following line. This makes it possible to use strings
596      of any length, FlexCat makes no assumptions on string length.
598    A string is hence given by a description line and the following string
599 line.  Let's see an example:
600          msgHello (/4/)
601          Hello, this is english!\n
603 The ID is missing here, so FlexCat chooses a suitable number. The number 4
604 instructs FlexCat, that the following string must not have less than four
605 characters and it may be of any length. See the file @{b}FlexCat.cd@{ub} for a
606 further example.
609 @endnode
611 @node "Catalog translation" "FlexCat_english.guide/Catalog translation"
612 @next "Source description"
613 @prev "Catalog description"
614 @toc "Main"
616 Catalog translation files
617 *************************
619    Catalog translation files are very similar to catalog descriptions,
620 except for other commands and having no informations on string ID and
621 length.  (These are taken from the catalog description.) Any string from the
622 catalog description must be present (However, FlexCat omits writing strings
623 into the catalog which are identical to the default string.)  and no
624 additional identifiers may occur. This is easy assured by using FlexCat to
625 create new catalog translation files. See @{"Overview" link "Overview"}.
627    The commands allowed in catalog translations are:
628 @{b}##version <str>@{ub}
629      Gives the catalog version as AmigaDOS version string. Example:
630               @{b}##version $VER: FlexCat.ct 8.3 (06.03.98)@{ub}
631      The version number of this catalog is 8. Hence the catalog descriptions
632      version number must be 0 or 8.
634      You may replace the date string @{b}27.09.93@{ub} with special keyword @{b}$TODAY@{ub}.
635      While creating catalog, @{b}$TODAY@{ub} will be replaced by current date (note,
636      only 1st occurance of @{b}$TODAY@{ub} in @{b}$VER@{ub} string will be processed).  If
637      you want your version strings to always be recent type i.e.:
638               @{b}$VER: FlexCat.ct 2.2 ($TODAY)@{ub}
640      Please note, that from FlexCat 2.6 on, the date is automatically
641      updated.  This way the you know, if the compiled catalog is up-to-date
642      in relation to a catalog translation.  Furthermore you can now have a
643      correct version string in the .ct file, denoting that is is a .ct
644      file. FlexCat automatically turns the ".ct" into  ".catalog" when
645      creating the catalog file.
647 @{b}##rcsid $Date: 1999/08/18 14:33:00 $ $Revision: 1.1.1.1 $ $Id: FlexCat_english.texinfo,v 1.1.1.1 1999/08/18 14:33:00 carlos Exp $@{ub}
648      can be used in conjunction with a revision control system instead of
649      ##version. @{b}<date>@{ub} is the date in the form @{b}yy/mm/dd@{ub}, @{b}time@{ub} is the time
650      (ignored), @{b}<rev>@{ub} the revision and @{b}<name>@{ub} the name to be used in the
651      version string.
653 @{b}##name <name>@{ub}
654      is present for CatComp compatibility only. It replaces the @{b}<name>@{ub}
655      argument in the @{b}##rcsid@{ub} command.
657 @{b}##language <str>@{ub}
658      The catalogs language. Of course this should be another language than
659      the catalog descriptions language. The @{b}##language@{ub} and @{b}##version@{ub}
660      commands must be present in a catalog translation.
662 @{b}##codeset <num>@{ub}
663      Currently not used, must be 0. This is the default value.
665 @{b}## chunk <ID> <string>@{ub}
666      Adds a chunk ID to the catalog which consists if the given <string>.
667      Usually one uses this to add comments to the catalog.
668               ## chunk AUTH German catalog translation by Jochen Wiedmann
670    The string from above looks like this in the catalog translation:
671          msgHello
672          Hallo, dies ist deutsch!\n
674 See @{b}Deutsch.ct@{ub} as further example of a catalog translation.
677 @endnode
679 @node "Source description" "FlexCat_english.guide/Source description"
680 @next "Using FlexCat source"
681 @prev "Catalog translation"
682 @toc "Main"
684 Source description files
685 ************************
687    This is the special part of FlexCat. Until now there is nothing that
688 CatComp, KitCat and others don't offer too. The created source should make
689 it easy, to use the catalogs without losing flexibility. Any programming
690 language should be possible and any requirements should be satisfyable.
691 This seems like a contradiction, but FlexCat's solution are the source
692 description files containing a template of the source to be created. These
693 are editable as the catalog description and translation files are, hence
694 FlexCat can create any code.
696    The source descriptions are searched for certain symbols which are
697 replaced by certain values. Possible symbols are the backslash characters
698 from above and additionally sequences beginning with a @{b}%@{ub}. (This is well
699 known for C programmers.)
700 @{b}%b@{ub}
701      is the base name of the catalog description. See @{"Program start" link "Program start"}.
703 @{b}%v@{ub}
704      is the version number of the catalog description. Don't mix this up
705      with the catalog version string from the catalog translation.
707 @{b}%l@{ub}
708      is the catalog descriptions language. Please note, that this is
709      inserted as a string. See @{b}%s@{ub} below.  below.
711 @{b}%n@{ub}
712      is the number of strings in the catalog description.
714 @{b}%%@{ub}
715      is the character @{b}%@{ub} itself.
717    But the most important thing are the following seqences. These represent
718 the catalog strings in different ways. Lines containing one or more of these
719 symbols are repeated for any String.
721 @{b}%i@{ub}
722      is the identifier from the catalog description.
724 @{b}%nd@{ub}
725 @{b}%nx@{ub}
726 @{b}%nc@{ub}
727      is the strings ID in decimal, hexadecimal or octal characters,
728      respectively.  The number @{b}n@{ub} tells FlexCat, how many characters the ID
729      should use (the string will be filled with Zeros at the left). You may
730      omit @{b}n@{ub}: In this case the ID will take just the number of characters it
731      needs.
733 @{b}%e@{ub}
734      is the number of this string. Counting begins with 0.
736 @{b}%s@{ub}
737      is the string itself; this will be inserted in a way depending on the
738      programming language and can be controlled using the commands
739      @{b}##stringtype@{ub} and @{b}##shortstrings@{ub}.
741 @{b}%na@{ub}
742      is the string's ID. The difference between @{b}%na@{ub} and e.g. @{b}%nx@{ub} is that
743      the @{b}%na@{ub} produces string's ID @{b}parted@{ub} to single bytes:
744             @{b}%2a@{ub} in source descriptor will produce @{b}\x00\0x20@{ub}
745      You may omit @{b}n@{ub}. In this case the ID will take 4 bytes.
747 @{b}%nt@{ub}
748      is the string's len. Please note, that the result value is always @{b}even@{ub}.
750 @{b}%z@{ub}
751      this item should be used together with @{b}%nt@{ub}. Because @{b}%nt@{ub} always returns
752      even value having desriptor line like:
753           static const char Block[] =
754           {
755                "%2a" "%2t" %s "%z"
756           };
757      may lead to problems, especially while parsing such table, because @{b}%2t@{ub}
758      might be even while real string's @{b}%s@{ub} lenght may be odd! So while
759      parsing you read or skip one byte too much (I guess consequences are
760      known). To avoid such problems @{b}%z@{ub} was introduced. FlexCat replaces it
761      with as many bytes (@{b}\x00@{ub}) as many string's lenght lacks to even. So if
762      string is 3 bytes long @{b}%nt@{ub} returns @{b}4@{ub} and @{b}%z@{ub} adds one @{b}\x00@{ub}
764 @{b}%(...)@{ub}
765      inserts the text between the brackets for any string except the last.
766      This is probably needed in Arrays, if the array entries should be
767      separated by commas, but the last entry must not be followed by a
768      comma. You can use @{b}%(,)@{ub} in that case. Note that within the brackets
769      there is no replacing of @{b}%@{ub} sequences. Backslash sequences, however,
770      are still allowed.
772    The control sequences @{b}%l@{ub} and @{b}%s@{ub} create strings. But how strings look
773 depends on the program language. That's why the source description allows
774 command lines similar to the catalog translation. These must begin with the
775 first character of the line and any command must have its own line.
776 Possible commands are:
777 @{b}##shortstrings@{ub}
778      makes longer strings to be splitted on different lines. This is
779      probably not always possible or not implemented into FlexCat and hence
780      the default is to create one, probably very long string.
782 @{b}##stringtype <type>@{ub}
783      Tells FlexCat how strings should look like. Possible types are
784     @{b}None@{ub}
785           No additional characters are created. An image of the string is
786           inserted and nothing else. No output of binary characters (the
787           backslash sequences) is possible.
789     @{b}C@{ub}
790           creates strings according to C. The strings are preceded and
791           followed by the character @{b}"@{ub}. Strings are splitted using the
792           sequences @{b}"\ @{ub} at the end of the line and @{b}"@{ub} at the beginning of the
793           new line. (The backslash is needed in macros.) Binary characters
794           are inserted using @{b}\OOO@{ub}. See @{"C" link "C"}.
796     @{b}Oberon@{ub}
797           is like string type C, except for the trailing backslash at the
798           end of the line. See @{"Oberon" link "Oberon"}. This string type is recommended for
799           Modula-2, too.
801     @{b}Assembler@{ub}
802           Strings are created using @{b}dc.b@{ub}. Readable ascii characters are
803           preceded and followed by the character @{b}'@{ub}, binary characters are
804           inserted as @{b}$XX@{ub}. See @{"Assembler" link "Assembler"}.
806     @{b}E@{ub}
807           Strings are preceded and followed by the character @{b}'@{ub}. A @{b}+@{ub}
808           concatenates strings which are spread on different lines. Binary
809           characters are inserted like in C.
811    Let's look at an excerpt from the file @{b}C_h.sd@{ub} creating an include file
812 for the programming language C.
813      ##stringtype C
814      ##shortstrings
815      
816      #ifndef %b_CAT_H    /*  Assure that this is read only once. */
817      #define %b_CAT_H
818      
819      
820      /*  Get other include files     */
821      #include <exec/types.h>
822      #include <libraries/locale.h>
823      
824      
825      /*  Prototypes  */
826      extern void Open%bCatalog(struct Locale *, STRPTR);
827      extern void Close%bCatalog(void);
828      extern STRPTR Get%bString(LONG);
829      
830      /*  Definitions of the identifiers and their ID's           */
831      /*  This line will be repeated for any string.              */
832      #define %i %d
833      
834      #endif
836    For the search path that is used for source descriptions see See
837 @{"Program start" link "Program start"}.
840 @endnode
842 @node "Using FlexCat source" "FlexCat_english.guide/Using FlexCat source"
843 @next "Future"
844 @prev "Source description"
845 @toc "Main"
847 Including FlexCat source in own programs
848 ****************************************
850    Of course this depends on what source is created and hence on the source
851 description. What we are talking here about are the source description
852 files distributed with FlexCat. See @{"Source description" link "Source description"}.
854    All source descriptions should allow using the program without
855 @{b}locale.library@{ub}. However, a global variable called @{b}LocaleBase@{ub} (@{b}_LocaleBase@{ub}
856 for assembler) must be present and initialized with NULL or by a call to
857 `Exec/OpenLibrary'. No localizing is possible in the former case except
858 when using the source description @{b}C_c_V20.sd@{ub}.  This allows localizing on
859 2.0 by repacing the @{b}locale.library@{ub} with the @{b}iffparse.library@{ub}. (A variable
860 @{b}IFFParseBase@{ub} has to be present for this and initialized like @{b}LocaleBase@{ub}.)
861 See @{"C" link "C"}.  The programmer does not need knowledge of these libraries except
862 when creating own source descriptions.
864    There are three functions and calling them is rather simple.
866  - : OpenCatalog (LOCALE, LANGUAGE)
867      This function possibly opens a catalog. The argument @{b}locale@{ub} is a
868      pointer to a Locale structure amd @{b}language@{ub} is a string containing the
869      name of the language that should be opened. In most cases these should
870      both be @{b}NULL@{ub} or @{b}NIL@{ub}, respectively, because the user's defaults are
871      overwritten otherwise. See `Locale.OpenCatalog' for details.
873      Non object oriented languages (C, Assembler, Modula) usually call these
874      function @{b}OpenXXXCatalog@{ub}, where XXX is the base name of the application:
875      This allows to use different catalogs in the same program.
877      If the user has @{b}Deutsch@{ub} and @{b}Français@{ub} as default languages and the
878      programs base name is @{b}XXX@{ub} this looks for the following files:
879               @{b}PROGDIR:Catalogs/Deutsch/XXX.catalog@{ub}
880               @{b}LOCALE:Catalogs/Deutsch/XXX.catalog@{ub}
881               @{b}PROGDIR:Catalogs/Français/XXX.catalog@{ub}
882               @{b}LOCALE:Catalogs/Français/XXX.catalog@{ub}
884      where @{b}PROGDIR:@{ub} is the programs current directory. (The order of
885      @{b}PROGDIR:@{ub} and @{b}LOCALE:@{ub} can get changed in order to suppress a requester
886      like @{b}Insert volume YYY@{ub}.
888      OpenCatalog is of type void (a procedure for Pascal programmers) and
889      hence gives no result.
891  - : GetString (ID)
892      Gives a pointer to the string with the given ID from the catalog
893      description.  Of course these strings are owned by @{b}locale.library@{ub} and
894      must not be modified.
896      An example might be useful. Take the string from the catalog
897      description example, which was called @{b}msgHello@{ub}. The source descriptions
898      declare a constant @{b}msgHello@{ub} representing the ID. This could be printed
899      in C using
900               printf("%s\n", GetString(msgHello));
902  - : CloseCatalog (VOID)
903      This function frees the catalog (that is the allocated RAM) before
904      terminating the program. You can call this function at any time even
905      before OpenCatalog is called.
908  @{" C        " link "C"}  FlexCat source in C programs
909  @{" C++      " link "C++"}  FlexCat source in C++ programs
910  @{" Oberon   " link "Oberon"}  FlexCat source in Oberon programs
911  @{" Modula-2 " link "Modula-2"}  FlexCat source in Modula-2 programs
912  @{" Assembler " link "Assembler"}  FlexCat source in Assembler programs
913  @{" E        " link "E"}  FlexCat source in E programs
914  @{" Appendix " link "Appendix"}  Multiple catalogs support
917 @endnode
919 @node "C" "FlexCat_english.guide/C"
920 @next "C++"
921 @toc "Using FlexCat source"
923 FlexCat source in C programs
924 ============================
926    C source consists of two parts: A @{b}.c@{ub} file which should be compiled and
927 linked without further notice and an include file which should be included
928 from any source part using catalog strings and which defines the ID's as
929 macros.
931    The C compilers I know (SAS/C, Dice and gcc) allow automatic opening of
932 libraries and initialization of the catalogs: Thus you need not call the
933 functions @{b}OpenCatalog@{ub} and @{b}CloseCatalog@{ub}, your compiler does this for you.
934 Similarly it calls the @{b}GetString@{ub} functions for all catalog strings from
935 within @{b}Opencatalog@{ub}. This allows to simply write @{b}msgHello@{ub} instead of
936 @{b}GetString(msgHello)@{ub}.
938    If you define a preprocessor symbol @{b}LOCALIZE_V20@{ub} to the compiler (option
939 @{b}-D LOCALIZE_V20@{ub} with gcc and Dice, @{b}DEF LOCALIZE_V20@{ub} with SAS/C), you get a
940 program which can use catalogs under OS 2.0: The @{b}locale.library@{ub} is replaced
941 by the @{b}iffparse.library@{ub} in that case. Your program needs an option like
942 @{b}LANGUAGE Deutsch@{ub} in that case: I function @{b}InitXXXCatalog@{ub} (@{b}XXX@{ub} being the
943 base name of the application) should be called, if this option is present,
944 which receives the language name as argument.  This option is ignored, of
945 course, if you have the @{b}locale.library@{ub}.  (It would be possible to do
946 similar things under OS 1.3, but I don't want to support this obsolete
947 version anymore.)
949    You loose a little bit functionality with this source description: For
950 example, you cannot supply a @{b}Locale@{ub} structure to @{b}OpenCatalog@{ub}. However, 95%
951 of all applications won't miss anything, others need to modify the source
952 description.
954    For an example of a program using these source descriptions see
955 @{"Overview" link "Overview"}.
957 @{b}   NOTE:@{ub}
959    Since v1.9, distribution archive contains @{b}CatComp_h.sd@{ub} source
960 descriptor, which can be used with programs utilizing more than one catalog
961 at the same time. Look inside to see how to update other source descriptors.
963    There're also another new source descriptor by Magnus Holmgren
964 <lear@algonet.se>.  The files @{b}Cat2h_c.sd@{ub} and @{b}Cat2h_h.sd@{ub} contains source
965 descriptors that generates code similar to the one generated by Cat2h by
966 Nico François (and also Cat2Inc by Magnus Holmgren ;). It uses a somewhat
967 different approach to string handling, that is small and fast.
969    Rather than storing all string in an array, and scan that one each time
970 (like CatComp normally does; there are ways around that though), the first
971 two bytes of a string contains the ID. The "GetString" function, which
972 takes a string as argument, then only reads these two bytes into a long
973 word, and the string ID and default string is then known.
975    As of version 1.9, FlexCat is capable of generating that kind of output,
976 using the %a command. The included files actually use %2a, and thus, only
977 two ID bytes per string are generated (like Cat2h does). This should be
978 enough for most applications. If you change the length, remember that the
979 GetString() function need to be changed accordingly.
981    The generated header file defines all strings, and the source file
982 contains code to open/close the catalog (with autoinit code for SAS/C and
983 DICE), and a suitable GetString function.  A quick look at the generated
984 code should be enough to gather all the details, I think.
986    The code does currently not support multiple catalogs, nor change of
987 version number and builtin language.  Easy to add though (e.g.  by using %b
988 for all names (and references) needed to be unique e.g.  Get%bString()
989 etc), should the need arise.
992 @endnode
994 @node "C++" "FlexCat_english.guide/C++"
995 @next "Oberon"
996 @prev "C"
997 @toc "Using FlexCat source"
999 FlexCat source in C++ programs
1000 ==============================
1002    Using FlexCat source in C++ programs is extremely comfortable: Almost
1003 everything is done by a special class implemented in the files
1004 @{b}C++_CatalogF.cc@{ub} and @{b}C++_CatalogF.h@{ub}. All you have to do is to rename these
1005 files into @{b}CatalogF.cc@{ub} and @{b}CatalogF.h@{ub}, compile them and create and compile
1006 two additional files using the source descriptions @{b}C++_cc.sd@{ub} and @{b}C++_h.sd@{ub}.
1007 The former will create a file with the strings (which must be compiled too,
1008 of course) and the latter will be included into your own program.  A C++
1009 program which uses FlexCat source will look like this:
1010          #include <iostream.h>
1011          extern "C"
1012          {
1013          #include <clib/exec_protos.h>
1014          }
1015          #include "CatalogF.h"
1016          #include "HelloLocalWorld_Cat.h"
1017      
1018          struct LocaleBase *LocaleBase = 0;
1019      
1020          int main()
1021          { //  You must open the library here, even if your compiler supports
1022            //  Auto-Opening: This will usually break if the locale.library
1023            //  is not present. This is not what we want here as we just use
1024            //  the builtin strings in that case.
1025            LocaleBase = (struct LocaleBase *) OpenLibrary("locale.library", 38);
1026      
1027            const CatalogF cat(0, 0, HelloLocalWorld_ARGS);
1028      
1029            cout >> cat.GetString(msgHelloLocalWorld);
1030      
1031            if (LocaleBase)
1032                CloseLibrary(LocaleBase);
1033          }
1034    A modification of gcc's @{b}libauto.a@{ub} is available which will even allow to
1035 remove the lines concerning the variable @{b}LocaleBase@{ub}.
1038 @endnode
1040 @node "Oberon" "FlexCat_english.guide/Oberon"
1041 @next "Modula-2"
1042 @prev "C++"
1043 @toc "Using FlexCat source"
1045 FlexCat source in Oberon programs
1046 =================================
1048    There are different source descriptions: @{b}AmigaOberon.sd@{ub} is designed for
1049 the current version of the @{b}AmigaOberon@{ub} compiler, @{b}Oberon_V39.sd@{ub} is for older
1050 versions and @{b}Oberon_V38.sd@{ub} uses the @{b}Locale.mod@{ub} from Hartmut Goebel.
1051 @{b}Oberon-A.sd@{ub} is, of course for @{b}Oberon-A@{ub}.
1053    The function prototypes are
1054          XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
1055          XXX.GetString(num: LONGINT): Exec.StrPtr;
1056          XXX.CloseCatalog();
1058 where @{b}XXX@{ub} is the basename from the source description.  See
1059 @{"Source description" link "Source description"}.
1061    Finally an example using FlexCat source:
1062          MODULE HelloLocalWorld;
1063      
1064          IMPORT  x:=HelloLocalWorld_Cat; Dos;
1065      
1066          BEGIN
1067            x.OpenCatalog(NIL, "");
1068      
1069            Dos.PrintF("%s\n", x.GetString(x.msgHello));
1070      
1071            (* Catalog will be closed automatically       *)
1072            (* when program exits.                        *)
1073          END Anything;
1076 @endnode
1078 @node "Modula-2" "FlexCat_english.guide/Modula-2"
1079 @next "Assembler"
1080 @prev "Oberon"
1081 @toc "Using FlexCat source"
1083 Flexcat source in Modula-2 programs
1084 ===================================
1086    Modula-2 supports a module concept similar to Oberon. This means that
1087 the function names are always the same. Unlike Oberon, however, Modula-2
1088 needs an implementation and a definition module, that's why you have to
1089 create two files using the source descriptions @{b}Modula2Def.sd@{ub} and
1090 @{b}Modula2Mod.sd@{ub}. These are adapted for the M2Amiga compiler. Note, that you
1091 need the file @{b}OptLocaleL.def@{ub} from version 4.3 of the M2Amiga compiler, too.
1093    The function prototypes are:
1094          PROCEDURE OpenCatalog(loc : ld.LocalePtr;
1095                                language : ARRAY OF CHAR);
1096          PROCEDURE CloseCatalog();
1097          PROCEDURE GetString(num : LONGINT) : ld.StrPtr;
1099 where @{b}XXX@{ub} is the base name from the source description.  See
1100 @{"Source description" link "Source description"}.
1102    Finally an example of a program using FlexCat source:
1103          MODULE HelloLocalWorld;
1104      
1105          IMPORT hl: HelloLocalWorldLocale,
1106                 io: InOut;
1107      
1108          BEGIN
1109            hl.OpenCatalog(NIL, "");
1110      
1111            io.WriteString(hl.GetString(hl.msgHello)); io.WriteLn;
1112      
1113            hl.CloseCatalog;
1114          END HelloLocalWorld.
1117 @endnode
1119 @node "Assembler" "FlexCat_english.guide/Assembler"
1120 @next "E"
1121 @prev "Modula-2"
1122 @toc "Using FlexCat source"
1124 FlexCat source in Assembler programs
1125 ====================================
1127    Assembler source is created for usage with the Aztec Assembler.  This
1128 should not be very different to other assemblers and you should be able to
1129 implement own source descriptions. The source consists of two parts: A @{b}.asm@{ub}
1130 file which should be assembled and linked without further notice and an @{b}.i@{ub}
1131 include file which defines the string ID's and must be included by the
1132 using program.
1134    The FlexCat-function names are slightly modified to allow the usage of
1135 different catalogs in one file: These are @{b}OpenXXXCatalog@{ub}, @{b}CloseXXXCatalog@{ub}
1136 and @{b}GetXXXString@{ub}, where @{b}XXX@{ub} is the base name from the source description.
1137 The concept is copied from the GadToolsBox and prooved good, as I think.
1138 See @{"Source description" link "Source description"}.
1140    As usual the function result is given in d0 and the functions save
1141 registers d2-d7 and a2-a7. OpenCatalog expects its arguments in a0 (pointer
1142 to Locale structure) and a1 (Pointer to language string) which should be
1143 NULL in most cases. GetString expects a pointer in a0. You should not care
1144 about what it points to.
1146    Finally an example of a program using FLexCat source:
1147      *   HelloLocalWorld.asm
1148              include "XXX.i" ; Opening this is a must. This
1149                              ; contains "xref OpenHelloLocalWorldCatalog", ...
1150      
1151              xref    _LVOOpenLibrary
1152              xref    _LVOCloseLibrary
1153              xref    _AbsExecBase
1154      
1155              dseg
1156      LocNam: dc.b    "locale.library",0
1157              dc.l    _LocaleBase,4       ; Must be present under this name
1158      
1159              cseg
1160      
1161      main:   move.l  #38,d0              ; Open locale.library
1162              lea     LocName,a1
1163              move.l  _AbsExecBase.a6
1164              jsr     _LVOOpenLibrary(a6)
1165      *   NO exit, if OpenLibrary fails
1166      
1167              sub.l   a0,a0               ; Open catalog
1168              sub.l   a1,a1
1169              jsr     OpenHelloLocalWorldCatalog
1170      
1171              lea.l   msgHello,a0         ; Get pointer to string
1172              jsr     GetHelloLocalWorldString
1173              jsr     PrintD0             ; and print it
1174      
1175      Ende:
1176              jsr     CloseHelloLocalWorldCatalog ; Close Catalog
1177              move.l  _LocaleBase,a1      ; Close locale.library
1178              move.l  a1,d0               ; this test is a must for 1.3
1179              beq     Ende1
1180              jsr     CloseLibrary
1181      Ende1:
1182              rts
1183              end
1186 @endnode
1188 @node "E" "FlexCat_english.guide/E"
1189 @next "Appendix"
1190 @prev "Assembler"
1191 @toc "Using FlexCat source"
1193 FlexCat source in E programs
1194 ============================
1196    Since version 3.0 E allows to split a programs in separate modules. The
1197 following describes the usage of @{b}E30b.sd@{ub} which works with E3.0b or later.
1198 (Version 3.0a had significant bugs, previous versions might use @{b}E21b.sd@{ub}
1199 which needs inserting the created source into the own source manually.)
1201 @{b}   E30b.sd@{ub} creates a module called @{b}Locale@{ub} which contains a variable @{b}cat@{ub} of
1202 type @{b}catalog_XXX@{ub}, where @{b}XXX@{ub} is the basename from the source description.
1203 See @{"Source description" link "Source description"}.  A file @{b}HelloLocalWorld.e@{ub} might look like this:
1204          MODULE '*Locale'
1205              -> Use this module
1206      
1207          DEF cat : PTR TO catalog_HelloLocalWorld
1208              -> This variable contains all the catalog strings and some
1209              -> methods. You must declare it in any module using
1210              -> Localization, but initialize it in the main module only.
1211      
1212          PROC main()
1213      
1214              localebase := OpenLibrary('locale.library', 0)
1215                  -> Open locale.library; @{b}No@{ub} exit, if it cannot
1216                  -> be opened: We use the builtin strings in that case.
1217      
1218              NEW cat.create()
1219              cat.open()
1220                  -> As already mentioned, this is needed in the main
1221                  -> module only.
1222      
1223              WriteF('\s\n', cat.msg_Hello_world.getstr())
1224                  -> cat.msg_Hello_world one of the strings contained in
1225                  -> cat. This string declares a method getstr() which
1226                  -> reads the catalog and returns a pointer to the
1227                  -> localized string.
1228      
1229              cat.close()
1230              IF localebase THEN CloseLibrary(localebase)
1231          ENDPROC
1234 @endnode
1236 @node "Appendix" "FlexCat_english.guide/Appendix"
1237 @prev "E"
1238 @toc "Using FlexCat source"
1240 Multiple catalogs support
1241 =========================
1243    Most of currently available source descriptors cannot be used for
1244 programs opening more than one catalog. In later releases it will surely
1245 change, and corrected source desriptors will be part of the release.
1247    For now I supply the example of such source descriptor file.  Read
1248 @{b}CatComp_h.sd@{ub} to see how should the descriptor be defined to avoid multiple
1249 symols etc. In few words: use @{b}%b@{ub} as prefix, suffix or other part of any
1250 name that is the vital part of source. If you table of strings is named
1251 @{b}STRING@{ub} replace this by @{b}%b_STRINGS@{ub} and you won't get dublicated lables any
1252 longer.
1254 @{b}   CatComp_h.sd@{ub} produces source file similar to CatComp's used to generate,
1255 and can be used by those people who wish to use FlexCat but don't want to
1256 significantly change all of own programs.
1259 @endnode
1261 @node "Future" "FlexCat_english.guide/Future"
1262 @next "Support"
1263 @prev "Using FlexCat source"
1264 @toc "Main"
1266 Further development of FlexCat
1267 ******************************
1269    However FlexCat seems to be almost finished, I got few items on my TODO
1270 list yet.  And of course I'm open for suggestions, tips or critics.
1271 Especially I offer to include new string types because this is possible
1272 with very minor changes.
1274    I would be pleased, if someone would send me new source descriptions and
1275 I could introduce them into further distributions. Any programming language,
1276 any extensions, provided that they are prooved good by testing the source in
1277 a real existing program. See See @{"Support" link "Support"}, for contact addresses.
1280 @endnode
1282 @node "Support" "FlexCat_english.guide/Support"
1283 @next "History"
1284 @prev "Future"
1285 @toc "Main"
1287 FlexCat support sites
1288 *********************
1290    For software updates visit FlexCat's home page at:
1291      http://amiga.com.pl/flexcat/
1293    If you got any suggestion, bug report please e-mail me at:
1295      carlos@amiga.com.pl
1297    or via snail mail:
1299      Marcin Orlowski
1300      ul. Radomska 38
1301      71-002 Szczecin
1302      Poland
1305 @endnode
1307 @node "Credits" "FlexCat_english.guide/Credits"
1308 @next "Index"
1309 @prev "History"
1310 @toc "Main"
1312 Credits
1313 *******
1315 @{b}   Jochen Wiedmann's thanks go to:@{ub}
1317 @{b}Albert Weinert@{ub}
1318      for KitCat, the predecessor of FlexCat which has done me valuable
1319      things, but finally wasn't flexible enough, and for the Oberon source
1320      descriptions.
1322 @{b}Reinhard Spisser und Sebastiano Vigna@{ub}
1323      for the Amiga version of texinfo. This documentation is written using
1324      it.
1326 @{b}The Free Software Foundation@{ub}
1327      for the original version of texinfo and many other excellent software.
1329 @{b}Matt Dillon@{ub}
1330      for DICE and especially for DME.
1332 @{b}Alessandro Galassi@{ub}
1333      for the italian catalog.
1335 @{b}Lionel Vintenat@{ub}
1336      for the E source description and its documentation, the french catalogs
1337      and bug reports.
1339 @{b}Antonio Joaquín Gomez Gonzalez (u0868551@oboe.etsiig.uniovi.es) for@{ub}
1340      the C++ source descripton, the spanish translation of the manual, the
1341      spanish catalog and the very good hint on speeding up the GetString
1342      function.
1344 @{b}Olaf Peters (op@hb2.maus.de) for the Modula-2 source description@{ub}
1346 @{b}Russ Steffen (steffen@uwstout.edu)@{ub}
1347      for the suggestion of the FLEXCAT_SDDIR variable.
1349 @{b}Lauri Aalto (kilroy@tolsun.oulu.fi)@{ub}
1350      for the finnish catalogs.
1352 @{b}Marcin Orlowski (carlos@amiga.com.pl)@{ub}
1353      for the polish catalogs and for maintaining the polish locale package.
1355 @{b}Udo Schuermann (walrus@wam.umd.edu)@{ub}
1356      for suggesting the WARNCTGAPS option and the ##chunk command.
1358 @{b}Christian Hoj (cbh@vision.auc.dk)@{ub}
1359      für die dänische Quelltextbeschreibung
1361 @{b}The people of #AmigaGer@{ub}
1362      for answering many stupid questions and lots of fun, for example
1363      stefanb (Stefan Becker), PowerStat (Kai Hoffmann), \ ill (Markus
1364      Illenseer), Quarvon (Jürgen Lang), ZZA (Bernhard Möllemann), Tron
1365      (Mathias Scheler), mungo (Ignatios Souvlatzis), \ jow (Jürgen Weinelt)
1366      und Stargazer (Petra Zeidler).
1368 @{b}Commodore@{ub}
1369      for the Amiga and Kickstart 2.0. Keep on developing it and I'll be an
1370      Amiga-user for the next 8 years too. ;-)
1372 @{b}   Marcin's thanks go to:@{ub}
1374 @{b}Jochen Wiedmann for creating FlexCat@{ub}
1376 @{b}Magnus Holmgren <lear@algonet.se> for additional source descriptor Cat2h@{ub}
1378 @{b}Members of @{b}Amiga Translators' Organization@{ub} <http://ato.vapor.com/ato/>@{ub}
1379      for creating additional translations and updating existing ones:
1381     @{b}Serbian catalog file by Ljubomir Jankovic <lurch@afrodita.rcub.bg.ac.yu>@{ub}
1383     @{b}Czech translation by Vit Sindlar <xsindl00@stud.fee.vutbr.cz>@{ub}
1385     @{b}Svedish translation by Magnus Holmgren <lear@algonet.se> and Hjalmar Wikholm <hjalle@canit.se>@{ub}
1387     @{b}Finnish translation updated by Mika Lundell <c71829@uwasa.fi>@{ub}
1389     @{b}Italian translation reworked by Luca Nora <ln546991@silab.dsi.unimi.it> and Giovanni Addabbo <gaddabbo@imar.net>@{ub}
1391     @{b}Slovenian translation by Damir Arh <damir.arh@guest.arnes.si>@{ub}
1393     @{b}Dutch translation updated by Leon Woestenberg <leon@stack.nl>@{ub}
1395 @{b}Christian Hattemer <chris@heaven.riednet.wh.tu-darmstadt.de> for StormC source descriptors and updating german catalog@{ub}
1397 @{b}Sven Steiniger <ss37@irz301.inf.tu-dresden.de> for the new source descriptor for E programmers (E32e.sd)@{ub}
1399 @endnode
1401 @node "History" "FlexCat_english.guide/History"
1402 @next "Credits"
1403 @prev "Support"
1404 @toc "Main"
1406 History of development
1407 **********************
1409    The history of FlexCat development is logged in the file @{b}FlexCat.history@{ub},
1410 which is integral part of the distribution archive.
1413 @endnode
1415 @node "Index" "FlexCat_english.guide/Index"
1416 @prev "Credits"
1417 @toc "Main"
1419 Index
1420 *****
1422 @index "Index"
1426  @{" .cd                                      " link "Catalog description"}   Catalog description
1427  @{" .ct                                      " link "Catalog translation"}   Catalog translation
1428  @{" .sd                                      " link "Source description"}   Source description
1429  @{" Adress                                   " link "Disclaimer"}   Disclaimer
1430  @{" AmigaOberon                              " link "Oberon"}   Oberon
1431  @{" Ascii-Code                               " link "Catalog description"}   Catalog description
1432  @{" Assembler                                " link "Assembler"}   Assembler
1433  @{" Author                                   " link "Disclaimer"}   Disclaimer
1434  @{" AutoC_c.sd                               " link "C"}   C
1435  @{" AutoC_h.sd                               " link "C"}   C
1436  @{" AztecAs_asm.sd                           " link "Assembler"}   Assembler
1437  @{" AztecAs_i.sd                             " link "Assembler"}   Assembler
1438  @{" C                                        " link "C"}   C
1439  @{" C++                                      " link "C++"}   C++
1440  @{" C++_CatalogF.cc                          " link "C++"}   C++
1441  @{" C++_CatalogF.h                           " link "C++"}   C++
1442  @{" C++_cc.sd                                " link "C++"}   C++
1443  @{" C++_h.sd                                 " link "C++"}   C++
1444  @{" C_c_V20.sd                               " link "C"}   C
1445  @{" C_c_V21.sd                               " link "C"}   C
1446  @{" C_h.sd                                   " link "C"}   C
1447  @{" Cat2h_c.sd                               " link "C"}   C
1448  @{" Cat2h_h.sd                               " link "C"}   C
1449  @{" CATALOG                                  " link "Program start"}   Program start
1450  @{" Catalog description                      " link "Catalog description"}   Catalog description
1451  @{" Catalog translation                      " link "Catalog translation"}   Catalog translation
1452  @{" CatComp_h.sd                             " link "C"}   C
1453  @{" CDFILE                                   " link "Program start"}   Program start
1454  @{" Changes                                  " link "History"}   History
1455  @{" CLI                                      " link "Program start"}   Program start
1456  @{" Contributions                            " link "Future"}   Future
1457  @{" Control characters                       " link "Catalog description"}   Catalog description
1458  @{" COPYMSGNEW                               " link "Program start"}   Program start
1459  @{" Copyright                                " link "Disclaimer"}   Disclaimer
1460  @{" Credits                                  " link "Credits"}   Credits
1461  @{" CTFILE                                   " link "Program start"}   Program start
1462  @{" Deutsch.ct                               " link "Catalog translation"}   Catalog translation
1463  @{" Distribution                             " link "Disclaimer"}   Disclaimer
1464  @{" E                                        " link "E"}   E
1465  @{" E21b.sd                                  " link "E"}   E
1466  @{" E30b.sd                                  " link "E"}   E
1467  @{" FILL                                     " link "Program start"}   Program start
1468  @{" FlexCat                                  " link "Future"}   Future
1469  @{" FlexCat source                           " link "Using FlexCat source"}   Using FlexCat source
1470  @{" FlexCat.cd                               " link "Catalog description"}   Catalog description
1471  @{" flexcat.prefs                            " link "Preferences"}   Preferences
1472  @{" FLUSH                                    " link "Program start"}   Program start
1473  @{" Future                                   " link "Future"}   Future
1474  @{" History                                  " link "History"}   History
1475  @{" Installation                             " link "Installation"}   Installation
1476  @{" Internet                                 " link "Disclaimer"}   Disclaimer
1477  @{" Mail                                     " link "Disclaimer"}   Disclaimer
1478  @{" MODIFIED                                 " link "Program start"}   Program start
1479  @{" Modula-2                                 " link "Modula-2"}   Modula-2
1480  @{" Modula2Def.sd                            " link "Modula-2"}   Modula-2
1481  @{" Modula2Mod.sd                            " link "Modula-2"}   Modula-2
1482  @{" NEW_MSG                                  " link "Preferences"}   Preferences
1483  @{" NEWCTFILE                                " link "Program start"}   Program start
1484  @{" NOBEEP                                   " link "Program start"}   Program start
1485  @{" NOBUFFEREDIO                             " link "Program start"}   Program start
1486  @{" NOLANGTOLOWER                            " link "Program start"}   Program start
1487  @{" NOOPTIM                                  " link "Program start"}   Program start
1488  @{" NOSPACE                                  " link "Program start"}   Program start
1489  @{" Oberon                                   " link "Oberon"}   Oberon
1490  @{" Oberon-A                                 " link "Oberon"}   Oberon
1491  @{" Oberon_V38.sd                            " link "Oberon"}   Oberon
1492  @{" Oberon_V39.sd                            " link "Oberon"}   Oberon
1493  @{" OLDNEWMSG                                " link "Program start"}   Program start
1494  @{" Overview                                 " link "Overview"}   Overview
1495  @{" Permissions                              " link "Disclaimer"}   Disclaimer
1496  @{" Preferences                              " link "Preferences"}   Preferences
1497  @{" Prohibitions                             " link "Disclaimer"}   Disclaimer
1498  @{" QUIET                                    " link "Program start"}   Program start
1499  @{" Requirements                             " link "Installation"}   Installation
1500  @{" Shell                                    " link "Program start"}   Program start
1501  @{" Source description                       " link "Source description"}   Source description
1502  @{" SOURCES                                  " link "Program start"}   Program start
1503  @{" Support                                  " link "Support"}   Support
1504  @{" Using FlexCat source                     " link "Using FlexCat source"}   Using FlexCat source
1505  @{" WARNCTGAPS                               " link "Program start"}   Program start
1506  @{" Workbench                                " link "Program start"}   Program start
1508 @endnode