Bringing flexcat 2.15 into the main branch
[AROS.git] / tools / flexcat / doc / FlexCat_swedish.texinfo
blobf62af3244d1bb15ef684ac3b0a1a0ee9ef3aac75
1 \input amigatexinfo
2 \input texinfo
3 @c %**start of header
4 @setfilename FlexCat_svenska.guide
5 @settitle FlexCat @value{VERSION}    Dokumentation
6 @setchapternewpage off
8 @c  $VER: FlexCat_svenska.texinfo 2.0
9 @c
10 @c  FlexCat:                  The flexible catalog generator
11 @c  Copyright (C)  1993-1999  Jochen Wiedmann and Marcin Orlowski
13 @c  This program is free software.
15 @c  This program is distributed in the hope that it will be useful,
16 @c  but WITHOUT ANY WARRANTY; without even the implied warranty of
17 @c  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 @c  This file contains the Swedish documentation, translated by
20 @c  Magnus Holmgren
22 @set xrefstring se
23 @set Xrefstring Se
24 @set Footnotestring Fotnoter
25 @set Chapterstring Kapitel
26 @set Appendixstring Appendix
27 @set Sectionstring Sektion
28 @set sectionstring sektion
29 @set pagestring sida
31 @set VERSION 2.0
32 @iftex
33 @parskip=0.75em
34 @end iftex
35 @c %**end of header
38 @titlepage
40 @title{FlexCat}
41 @subtitle{Den flexibla kataloggeneratorn}
42 @subtitle{}
43 @subtitle{Version @value{VERSION}}
44 @author Jochen Wiedmann och Marcin Orlowski
45 @vskip 0pt plus 1filll
46 @tex
47 @halign{@hfil#&#@hfil@cr
48        Sedan version 1.8 utvecklas FlexCat av:@cr
49 @cr
50        & Marcin Orlowski@cr
51        & ul. Radomska 38@cr
52        & 71-002 Szczecin@cr
53        & Polen@cr
54 @cr
55        & carlos@@amiga.com.pl@cr
56        & http://amiga.com.pl/flexcat/@cr
57 @cr
58 FlexCat skapades av:@cr
59 @cr
60        & Jochen Wiedmann@cr
61        & Am Eisteich 9@cr
62        & 72555 Metzingen@cr
63        % Tyskland
65 @end tex
67 Tillstånd har utfärdats för att göra och distribuera exakta kopior av den
68 här manual och av programmet FlexCat.
70 @ignore
71 Tillstånd har utfärdats för att behandla den här filen med TeX och skriva
72 ut resultatet, under förutsättning att det utskrivna dokumentet inehåller
73 ett kopieringstillstånd identiskt med detta, med undantag för borttagandet
74 av detta stycke (då detta stycke inte är relevant för den utskrivna
75 manualen).
76 @end ignore
78 Författaren utfärdar @strong{inga som helst} garantier för att programmet
79 som beskrivs i denna dokumentation, samt resultatet från programmet, är
80 korrekta. Författaren kan inte hållas ansvarig för @strong{några} skador
81 som härrör från användadet av denna mjukvara.
82 @end titlepage
83 @iftex
84 @headings double
85 @end iftex
88 @ifinfo
89 @node Top
90 @top FlexCat V@value{VERSION} - Dokumentation
91 Den här filen beskriver FlexCat version @value{VERSION}, ett program som
92 genererar kataloger, samt källkoden för att använda dem. FlexCat liknar
93 @code{CatComp} och @code{KitCat}, men kan generera vilken källkod du vill.
94 Detta sker genom så kallade @code{källkodsbeskrivningar}, som är mallar för
95 den genererade koden. De kan redigeras, och kan sålunda anpassas till olika
96 programspråk samt individuella behov.
98 @menu
99 Generellt:
101 * Anvsvarsfråntagande: Disclaimer.  Upphovsrätt, (INGEN) garanti
102 * Översikt: Survey.                 Vad är FlexCat?
103 * Installation: Installation.       Hur får jag det att fungera?
105 Använda FlexCat:
107 * Programstart: Program start.      Använda FlexCat i ett skal
108 * Inställningar: Preferences.       Ändra FlexCats normala beteende
109 * Katalogbeskrivning: Description.  Katalogbeskrivningar (@key{.cd}-filer)
110 * Katalogöversättning: Translation. Katalogöversättningar (@key{.ct}-filer)
111 * Källkodsbeskrivning: Source.      Källkodsbeskrivningar (@key{.sd}-filer)
112 * Använda källkoden: Using source.  Använda källkoden i egna program
114 Mindre viktigt:
116 * Framtid: Future.                  Vidare utveckling av FlexCat
117 * Support: Support.                 Var uppdateringar kan hittas
118 * Historia: History.                Utvecklingshistoria
119 * Tack till: Credits.               Vad jag alltid velat säga@dots{}
120 * Index: Index.                     Hitta det du aldrig letar efter
122 @end menu
123 @end ifinfo
129 @ifinfo
130 @node Disclaimer
131 @chapter Upphovsrätt och anndra rättsliga saker
132 @cindex Copyright
133 @cindex Upphovsrätt
134 @cindex Distribution
135 @cindex Tillstånd
136 @cindex Förbud
137 @cindex Författare
138 @cindex Adress
139 @cindex Internet
140 @cindex E-post
141 @example
142 Upphovsrätt @copyright{} 1993-1999 Jochen Wiedmann och Marcin Orlowski
144         Jochen Wiedmann
145         Am Eisteich 9
146         72555 Metzingen
147         Tyskland
149         Sedan version 1.8 utvecklas programmet av
151         Marcin Orlowski
152         ul. Radomska 38
153         71-002 Szczecin
154         Polen
156         carlos@@amiga.com.pl
157         http://amiga.com.pl/flexcat/
158 @end example
160 Tillstånd har utfärdats för att göra och distribuera exakta kopior av den
161 här manualen och av programmet FlexCat.
163 @ignore
164 Tillstånd har utfärdats för att behandla den här filen med TeX och skriva
165 ut resultatet, under förutsättning att det utskrivna dokumentet inehåller
166 ett kopieringstillstånd identiskt med detta, med undantag för borttagandet
167 av detta stycke (då detta stycke inte är relevant för den utskrivna
168 manualen).
169 @end ignore
171 Författaren utfärdar @strong{inga som helst} garantier för att programmet
172 som beskrivs i denna dokumentation, samt resultatet från programmet, är
173 korrekta. Författaren kan inte hållas ansvarig för @strong{några} skador
174 som härrör från användadet av denna mjukvara. @end ifinfo
177 @iftex
178 @vfill@eject
179 @end iftex
181 @node Survey
182 @chapter Översikt
183 @cindex Översikt
184 I och med OS 2.1 erbjuder Amigan ett trevligt system för att använda
185 program på olika språk: @code{locale.library}. (Detta kallas att lokalisera
186 programmet; det är vad namnet står för.)
188 Idén är enkel: Du väljer ett språk - engelska för det mesta - och skriver
189 ditt program på samma sätt som du gjorde utan lokalisering, förutom att
190 konstanta strängar ersätts av vissa speciella funktionsanrop. Ett annat
191 funktionsanrop gör det möjligt för användaren att välja ett annat språk när
192 programmet körs. (Det senare funktionsanropet läser in en extern fil, den
193 så kallade @code{katalogen}, och gör att den ovan nämnda funktionen läser
194 strängarna från katalogen istället för att använda de fördefinierade
195 strängarna.)
197 Dessa kataloger är oberoende av programmet. Allt du behöver för att lägga
198 till ett annat språk är att skapa en ny katalogfil, och detta kan göras när
199 som helst, utan att programmet ändras.
201 Men det är några saker till som programmeraren behöver göra: Han behöver
202 skapa katalogen, de fördefinierade strängarna, och lite källkod för att
203 använda strängarna (de funktioner som nämns ovan). FlexCat har konstruerats
204 för att göra detta på ett enkelt och näst intill automatiskt sätt, utan att
205 för den skull förlora flexibilitet när det gäller skapandet av källkoden.
206 Ett exempel för att förtydliga:
208 Antag att vi vill skriva @file{HelloLocalWorld.c}. Vårt slutliga program
209 kommer att se ut så här:
211 @example
212 #include <stdio.h>
213 #include <stdlib.h>
214 /* Du @strong{måste} inkludera den här filen! */
215 #include <HelloLocalWorld_Cat.h>
217 void main(int argc, char *argv[])
219     printf("%s\n", msgHello);
221 @end example
223 @noindent
224 Observera att detta är mycket likt den ursprungliga @file{HelloWorld.c},
225 förutom att vi har ersatt strängen "Hello, world!" med konstanten
226 @code{msgHello}.
228 Dessa konstanter och de relaterade strängarna definieras i en så kallad
229 @code{katalogbeskrivning} (@pxref{Description, katalogbeskrivning}). Du
230 börjar alltid med att skapa en sådan fil, kallad @file{HelloLocalWord.cd},
231 som kan se ut så här:
233 @example
234 ; Kommentarer kan naturligtvis användas! Varje rad som
235 ; börjar med ett semikolon antas vara en kommentar.
237 ; Språket för de inbyggda strängarna:
238 #language english
240 ; Katalogens version. Den använd vid anropet av
241 ; Locale/OpenCatalog(). Detta skiljer sig från
242 ; Exec/OpenLibrary(): 0 betyer vilken katalog som helst,
243 ; medans andra nummer måste stämma exakt!
244 #version 0
246 ; Detta definierar en sträng och det ID som används för att
247 ; ange den. Talet 4 här säger att strängen inte får vara
248 ; kortare än 4 tecken.
249 msgHello (/4/)
250 Hello, world!
251 @end example
253 Genom att använda FlexCat skapar du två filer utifrån katalogbeskrivningen:
254 Inkluderingsfilen @file{HelloLocaleWorld_Cat.h}, som definierar
255 konstanterna, samt filen @file{HelloLocalWorld_Cat.c}, som innehåller en
256 vektor med strängar samt några initieringsfunktioner. Du behöver inte veta
257 vad funktionerna gör; använd dem bara. Du behöver framför allt inte veta
258 något om @code{locale.library}!
260 Du kanske är intresserad av hur dessa filer ser ut, eller du kanske till
261 och med vill modifiera dem. Det är här skillanden mellan FlexCat och andra
262 kataloggeneratorer märks: Med FlexCat är du inte bunden till vissa inbyggda
263 format på dessa filer. Istället använder FlexCat externa mallfiler, så
264 kallade @code{källkodsbeskrivningar}. Detta gör det möjligt att till exmpel
265 använda kataloger med AmigaOS 2.0 (@pxref{Source, källkodsbeskrivning}). Om
266 du använder källkodsbeskrivningar från FlexCat-distributionen kan du skapa
267 källkodsfiler med följande kommandon:
269 @example
270 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c.sd}
271 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd}
272 @end example
274 När ditt program är klart, kan du använda FlexCat för att skapa så kallade
275 @code{katalogöversättningar}; en översättning för varje språk du vill
276 stödja (förutom det inbyggda språket). @xref{Translation,
277 katalogöversättning}. Låt oss skapa en tysk katalogöversättning för vårt
278 exempelprogram:
280 @example
281 @samp{FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct}
282 @end example
284 @noindent
285 Den här filen skulle nu se ut så här:
287 @example
288 ## version
289 ## language
290 ## codeset 0
291 ; Kommentarer kan naturligtvis användas! Varje rad som
292 ; börjar med ett semikolon antas vara en kommentar.
294 ; Språket för de inbyggda strängarna:
296 ; Katalogens version. Den använd vid anropet av
297 ; Locale/OpenCatalog(). Detta skiljer sig från
298 ; Exec/OpenLibrary(): 0 betyer vilken katalog som helst,
299 ; medans andra nummer måste stämma exakt!
301 ; Detta definierar en sträng och det ID som används för att
302 ; ange den. Talet 4 här säger att strängen inte får vara
303 ; kortare än 4 tecken.
304 msgHello
306 ;Hello, world!
307 @end example
309 @noindent
310 Som du ser är de mycket lika katalogbeskrivningar. FlexCat inkluderar
311 kommentarerna i från katalogbeskrivningen, även där de är meningslösa:
312 Observera kommentaren om stränglängden, som inte borde synas här, eftersom
313 den informationen bara finns i katalogbeskrivningen.
315 Allt du behöver göra nu är att fylla i informationen för versionen (i stil
316 med @samp{$VER: HelloLocalWorld.catalog 1.1 (25.8.97)}), språket på
317 katalogöversättningen (@samp{Deutsch} för tyska i det här fallet),
318 koduppsättningen (som alltid bör vara 0 för tillfället; se
319 Locale/OpenCatalog() för mer information) och naturligtvis strängen.
320 FlexCat inkluderar den ursprungliga strängen som en kommentar, så att du
321 alltid vet som skall fyllas i. Slutligen skapar du katalogen med ett
322 kommando som:
324 @example
325 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog}
326 @end example
328 @noindent
329 Observera att du inte behöver själva programmet, eller källkodsfilerna som
330 skapades med FlexCat, när du skapar katalogerna! Du kan skapa nya kataloger
331 när som helst. Det är vanligt att i distributioner skicka med en fil som
332 FlexCat.ct, så att användare kan göra sina egna översättningar.
334 Men vad händer om du ändrar programmet senare? Redigera bara
335 katalogbeskrivningen och använd FlexCat för att uppdatera
336 katalogöversättningarna:
338 @example
339 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct}
340 @end example
342 @noindent
343 Allt du behöver göra nu är att översätta eventuella nya strängar.
347 @iftex
348 @vfill@eject
349 @end iftex
351 @node Installation
352 @chapter Installation
353 @cindex Installation
354 @cindex Systemkrav.
355 FlexCat är skrivet i ren ANSI-C (förutom lokaliseringen), så det bör
356 fungera på vilken Amiga som helst, och förhoppningsvis även på andra
357 datorer efter en omkompilering (lokaliseringen kommenteras bort i det
358 fallet). Detta gäller också för de skapade programmen: FlexCat skrevs med
359 sig själv. All distribuerad källkodsbeskrivning bör skapa program som kan
360 köras på vilken Amiga som helst, och även vilken dator som helst
361 (naturligtvis måste du se till att variabeln LocaleBase har värdet NULL i
362 det senare fallet). Lokalisering är dock bara möjligt med Workbench 2.1 och
363 högre, eftersom @code{locale.library} inte finns tillgängligt i tidigare
364 versioner av operativsystemet.
366 Det är inte omöjligt att lokalisera ett program utan @code{locale.library}:
367 Källkodsbeskrivningarna @file{C_c_V20.sd} och @file{C_h_V20.sd} använder
368 @code{iffparse.library} (plus lite egen kod) istället för
369 @code{locale.library}, om @code{locale.library} inte är tillgängligt. Detta
370 gör det möjligt att lokalisera program som kör under Workbench 2.0.
371 @xref{C, C}.
373 Att installera FlexCat är enkelt: Kopiera bara programmet till en låda i
374 din kommandosökväg, och välj ett ställe för de källkodsbeskrivningar du
375 behöver (filer som heter något i stil med @file{xx_yy.sd}, där @file{xx} är
376 programspråket). Du vill förmodligen sätta miljövariabln
377 @var{FLEXCAT.PREFS} eller @var{FLEXCAT_SDDIR}. @xref{Program start,
378 programstart}.
380 Om du vill använda FlexCat i ett annat språk än engelska behöver du kopiera
381 motsvarande katalogfil. T.ex.@:, för tyska, kopiera filen
382 @file{Catalogs/Deutsch/FlexCat.catalog} till
383 @file{Locale:Catalogs/Deutsch/} eller till
384 @file{ProgDir:Catalogs/Deutsch/}, där @file{ProgDir:} är den låda där
385 FlexCat finns. @xref{Using source, att använda FlexCat-källkod}.
389 @iftex
390 @vfill@eject
391 @end iftex
393 @node Program start
394 @chapter Använda FlexCat i ett skal
395 @cindex CLI
396 @cindex Skal
397 @cindex Workbench
398 FlexCat är ett skalbaserat program, och kan inte användas från Workbench.
399 Syntaxen är:
401 @example
402 FlexCat CDFILE/A,CTFILE,CATALOG/K,NEWCTFILE/K,SOURCES/M,
403         WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,
404         NOLANGTOLOWER/S,NOBUFFEREDIO/S,MODIFIED/S,QUIET/S
405 @end example
407 Notera att FlexCat inte använder de normala rutinerna för att tolka
408 argumenten (för portabilitetens skull). Detta gör framför allt att de enda
409 nyckelod du kan (och måste) ange är CATALOG och NEWCTFILE (de som är av
410 typen "/K"), de andra kan inte anges, då de skulle tolkas som argument i
411 sig. Detta kommer att ändras, förmodligen i nästa version.
413 I och med version 1.9 har FlexCat ett enkelt system för inställningar, som
414 låter dig ändra FlexCats normala beteende. @xref{Preferences,
415 inställningar}.
417 Vad argumenten används till:
419 @table @strong
420 @cindex CDFILE
421 @item CDFILE
422 är namnet på den katalogbeskrivning som skall läsas. Denna måste alltid
423 anges. Observera att basnamnet för källkodsbeskrivningen skapas från detta
424 argument, vilket gör det lägeskänsligt. @xref{Source, källkodsbeskrivning}.
426 @cindex CTFILE
427 @item CTFILE
428 är namnet på den katalogöversättning som skall läsas. Denna behövs när du
429 skapar en katalog, eller när du uppdaterar en gammal katalogöversättning
430 via NEWCTFILE-argumentet: FlexCat läser den gamla översättningen samt
431 katalogbeskrivningen och skapar en ny katalogöversättning innehållande de
432 gamla strängarna, och kanske några tomma rader för de nya strängarna.
434 @cindex CATALOG
435 @item CATALOG
436 är namnet på den katalogfil som skall skapas. Detta argument kräver att
437 CTFILE också anges.
439 @cindex NEWCTFILE
440 @item NEWCTFILE
441 är namnet på den katalogöversättning som skall skapas. FlexCat läser
442 strängarna från CTFILE, om CTFILE angavs; strängar som saknas i
443 katalogöversättningen ersätts med tomma rader. (Den nya
444 katalogöversättningen kommer bara att innehålla tomma rader som strängar om
445 CTFILE inte anges.)
447 @cindex SOURCES
448 @item SOURCES
449 är namnet på de källkoder som skall skapas. Dessa anges i formatet
450 @samp{källkod=mall}, där @file{källkod} är filen som ska skapas, och
451 @samp{mall} är namnet på den källkodsbeskrivning som ska läsas.
453 Om källkodsbeskrivningen inte kunde hittas, försöker FlexCat öppna en fil
454 med samma namn i lådan @file{ProgDir:lib}. (Lådan @file{lib} i den låda som
455 FlexCat finns i.) Du kan ändra denna förvalda låda genom att
456 sätta miljövariabeln @var{FLECCAT_SDDIR}. Exempel:
458 @example
459 @samp{FlexCat FlexCat.cd FlexCat_Cat.c=Templates/C_c_V20.sd}
460 @end example
462 @noindent
463 letar efter filen @file{Templates/C_c_V20.sd} i den aktuella lådan. Om
464 denna fil inte kunde hittas, och miljövariablen @var{FLEXCAT_SDDIR} inte
465 var definierad, letar FlexCat efter
466 @file{ProgDir:lib/Templates/C_c_V20.sd}. Om @var{FLEXCAT_SDDIR} var
467 definierad och innehöll till exempel @samp{Work:FlexCat}, letar FlexCat
468 efter @file{Work:FlexCat/Templates/C_c_V20.sd}.
470 @cindex WARNCTGAPS
471 @item WARNCTGAPS
472 Normalt sett varnar FlexCat inte om symboler saknas i
473 katalogöversättningen. Med denna flagga kan du få FlexCat att visa sådana
474 varningar.
476 @cindex NOOPTIM
477 @item NOOPTIM
478 Om båda strängarna (orginalet i #?.cd, och översättningen i #?.ct) är
479 likadana, så antar FlexCat normalt sett att strängen inte behöver skrivas
480 till katalogen, eftersom strängen då kan tas från de inbyggda strängarna
481 istället. Men om du av någon anledning vill att även dessa strängar skall
482 skrivas (eller: om du vill att alla strängar skall skrivas), använd NOOPTIM.
484 @cindex FILL
485 @item FILL
486 Denna finess är mycket användbar för översättarna. När du arbetar på en
487 översättning kan en del strängar vara tomma, men du vill prova de
488 översättningar du redan har gjort. Olyckligtvis så skriver då alla
489 kataloggeneratorer tomma strängar, vilket skulle göra att t.ex.@: knappar
490 blir tomma.
492 En flagga för att förbjuda tomma strängar är inte en bra lösning, eftersom
493 du då inte kan ha sådana om det behövs. Dessutom, ett illa skrivet program
494 kanske kräver att alla strängar finns i katalogen (även de tomma), t.ex.@:
495 för att det inte finns några inbyggda strängar. Genom att använda
496 FILL-flaggan kan du tvinga FlexCat att skriva orginalsträngarna (från
497 @file{#?.cd}-filen) varje gång den hittar en tom översättning, eller en
498 översättning som inte finns.
500 OBS: Detta bör bara användas för att prova översättningen. Färdiga
501 kataloger bör alltid skapas utan någon FILL-flagga!
503 @cindex FLUSH
504 @item FLUSH
505 Denna flagga är användbar när du översätter och provar din översättning.
506 Eftersom AmigaOS inte direkt tar bort kataloger (och bibliotek,
507 teckensnitt, drivrutiner, etc.@:) från minnet när de inte längre används,
508 kan du behöva tvinga systemet att ta bort dem (t.ex.@: genom att använda
509 @file{C:Avail FLUSH}) varje gång du vill att den nyskapade katalogen skall
510 läsas från disk (istället för att kopian i minnet används). Om du anger den
511 här flaggan när katalogen skapas, kommer FlexCat att ta bort alla oanvända
512 saker från minnet.
514 OBS: FLUSH fungerar bara när du skapar en katalog. Annars kommer den att
515 ignoreras.
517 Example:
519 @example
520 @samp{FlexCat Test.cd Test.ct CATALOG Test.catalog FLUSH}
521 @end example
523 @cindex NOBEEP
524 @item NOBEEP
525 I och med version 1.9 blänker FlexCat skärmen för att uppmärksamma dig om
526 problem som har påträffats. Detta kan vara mycket användbart när du
527 använver FlexCat från en miljö utan en normal utmatning (t.ex.@: om du
528 startar ett skript från Opus eller ett annat program). Du kanske inte
529 tycker om dessa blänkningar (fast FlexCat är smart nog att bara blänka en
530 gång, även om du får 20 varingar). I så fall kan du använda NOBEEP-flaggan
531 för att stänga av blänkandet.
533 @cindex NOLANGTOLOWER
534 @item NOLANGTOLOWER
535 Normalt konverterar FlexCat argumentet till #language till gemener genom att
536 använda en funktion i utility.library. Denna funktion använder
537 locale.library om det är installerat, men tydligen finns det felaktiga
538 översättningstabeller för några språk (till exempel tjeckiska), vilket kan
539 leda till en felaktig konvertering. Med den här flaggan kan du undvika
540 problemet. Du bör dock kontakta författaren av språkfilerna så att dessa
541 fel rättas, eftersom andra program kan drabbas av samma problem. Kom ihåg
542 att bara använda gemener för #language om du använder den här flaggan (och
543 använd den bara om det är absolut nödvändigt).
545 @cindex NOBUFFEREDIO
546 @item NOBUFFEREDIO
547 FlexCat använder buffrad IO. Detta kan göra FlexCat snabbare, men det är
548 inte säkert. Du kan då använda den här flaggan för att använda obuffrad IO.
549 Använd den bara om det är nödvändigt.
551 @cindex MODIFIED
552 @item MODIFIED
553 Den här flaggan gör att FlexCat bara skapar katalogen när någon av
554 källfilerna, #?.cd och #?.ct, har ändrats sedan katalogen senast
555 kompilerades. När katalogen är nyare än källfilerna avslutar FlexCat utan
556 att göra något. Den här flaggan är användbar när du vill skapa en
557 kommandofil för att kompilera flera kataloger på en gång (till exempel för
558 översättningen av stora program), och inte vill slösa tid på att kompilera
559 om kataloger som inte har ändrats. (Detta är alltså ett enklare alternativ
560 till att använda ett make-program.)
562 @cindex QUIET
563 @item QUIET
564 Säger åt FlexCat att hålla tyst om det inte är absolut nödvändigt. Det
565 betyder att du inte kommer att se några varningar. Fel kommer att
566 rapporteras som vanligt.
568 @end table
570 För fler exempel på kommandorader, se @ref{Survey, översikten}.
575 @iftex
576 @vfill@eject
577 @end iftex
579 @node Preferences
580 @chapter Ändra FlexCats normala beteende
581 @cindex Inställningar
582 @cindex flexcat.prefs
584 I och med version 1.9 har FlexCat ett enkelt system för inställningar.
585 Genom att använda miljövariabeln @var{FLEXCAT.PREFS} kan du ändra
586 programmets normala beteende.
588 Variabeln @var{FLEXCAT.PREFS} tolkas med dos.library:s ReadArgs()-funktion,
589 och sålunda skall alla argument anges på en rad, där argumenten separeras
590 med mellanslag. Mallen för inställningarna ser ut som följer:
592 @example
593 SDDIR/K,WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,QUIET/S
594 @end example
596 För mer information om dessa argument, @xref{Program start, programstart}.
598 En kommentar angående SDDIR: När källkoden skapas letar FlexCat först i den
599 aktuella lådan, sedan i lådorna som anges i inställningarna. Om detta
600 fortfarande inte lyckas, läses @var{FLEXCAT_SDDIR}, och slutligen lådan
601 @file{ProgDir:lib/}. Genom att använda både inställningsvariabeln och
602 @var{FLEXCAT_SDDIR} kan du alltså använda två egna lådor för
603 källkodsbeskrivningar samtidigt.
607 @iftex
608 @vfill@eject
609 @end iftex
611 @node Description
612 @chapter Katalogbeskrivningar
613 @cindex Katalogbeskrivning
614 @cindex .cd
615 En katalogbeskrivning innehåller fyra olika sorters rader.
617 @table @strong
618 @item Kommentarsrader
619 En rad om börjar med ett semikolon antas vara en kommentarsrad, och
620 ignoreras därmed. (Strängrader (se nedan) är ett undantag. De kan börja med
621 ett semikolon.)
623 @item Kommandorader
624 En rad som börjar med ett "#" (med samma undantag som ovan) antas vara
625 kommandorader. Följande kommandon kan användas:
627 @table @code
628 @item #language <sträng>
629 anger programmets förvalda språk; det språk som används i
630 katalogbeskrivningen. Förvalt är @samp{#language english}.
632 @item #version <num>
633 anger versionsnumret för katalogen som skall öppnas. Observera att detta
634 nummer måste stämma exakt, och inte vara samma eller högre, som för
635 @cite{Exec/OpenLibrary}. Undantaget är 0, vilket godtar vilken
636 katalogversion som helst. Förvalt är @samp{#version 0}.
638 Se @code{Locale/OpenCatalog} för mer information om katalogspråket och
639 versionen.
641 @item #lengthbytes <num>
642 Säger åt FlexCat att placera det givna antalet tecken före en sträng,
643 innehållande strängens längd. Längden är det antal tecken strängen tar upp,
644 förutom längdtecknena och ett avslutande nolltecken. (Katalogfiler, och
645 därmed katalogsträngar kommer att ha ett avslutande nolltecken. Detta är
646 inte alltid sant för de inbyggda strängarna, beroende på hur
647 källkodsbeskrivningen ser ut.) @samp{<num>} måste vara mellan 0 och sizeof(
648 long ) = 4. Förvalt är @samp{#lengthbytes 0}.
650 @item #basename <sträng>
651 Anger basnamnet för programmet. @xref{Source, källkodsbeskrivning}. Denna
652 sträng används istället för basnamnet från kommandoradsargumentet CDFILE.
653 @xref{Program start, programstart}.
654 @end table
656 Kommandon är lägeskänsliga.
658 @item Beskrivningsrader
659 deklarerar en sträng. De ser ut som @samp{IDSTR (id/minlen/maxlen)}, där
660 @samp{IDSTR} är en identifierare (en sträng bestående av tecknena a-z, A-Z
661 0-9, samt @samp{_}); @samp{id} är ett unikt nummer (härmed kallat ID) och
662 @samp{minlen}, samt @samp{maxlen} är strängens minimala respektive maximala
663 längd. De tre sista talen behöver inte anges (men tecknena @samp{(//)}
664 måste anges!), i vilket fall FlexCat väljer ett nummer, och sätter inte
665 några begränsningar på strängens längd. Det är bäst att inte ange några
666 ID-nummer om du inte absolut behöver det. Dessa rader följs av
668 @item Strängrader
669 @cindex Kontrolltecken
670 @cindex ASCII-kod
671 som innehåller strängen, och inget annat. Dessa strängaar kan innehålla
672 vissa kontrolltecken, som börjar med ett bakstreck:
674 @table @samp
675 @item \b
676 Backsteg (ASCII 8)
678 @item \c
679 Kontrollsekvensstart (ASCII 155)
681 @item \e
682 Escape (ASCII 27)
684 @item \f
685 Sidmatning (ASCII 12)
687 @item \g
688 Blänk (ASCII 7)
690 @item \n
691 Radmatning (ASCII 10)
693 @item \r
694 Radretur (ASCII 13)
696 @item \t
697 Tab (ASCII 9)
699 @item \v
700 Vertikal tab (ASCII 11)
702 @item \)
703 Avslutande parantes, som kan behövas som en del av sekvensen @samp{(..)},
704 se @ref{Source, källkodsbeskrivning}.
706 @item \\
707 Bakstreck
709 @item \xHH
710 Tecknet som anges av ASCII-koden @samp{HH}, där @samp{HH} är hexadecimala
711 siffror.
713 @item \OOO
714 Tecknet som anges av ASCII-koden @samp{OOO}, där @samp{OOO} är oktala
715 siffror.
716 @end table
718 Slutligen, ett ensamt bakstreck på slutet av raden anger att strängen
719 fortsätter på nästa rad. Detta gör det möjligt att ange strängar av
720 godtycklig längd; FlexCat gör inte några antanganden gällande strängens
721 längd.
723 @end table
725 En sträng anges alltså av en beskrivningsrad, samt den följande
726 strängraden. Ett exempel:
728 @example
729     msgHello (/4/)
730     Hello, this is english!\n
731 @end example
733 @noindent
734 @cindex FlexCat.cd
735 ID-numret saknas här, så FlexCat väljer ett lämpligt nummer. Numret 4 säger
736 åt FlexCat att den följande strängen inte får ha färre än fyra tecken, och
737 att den i övrigt kan ha godtycklig längd. Se filen @file{FlexCat.cd} för
738 ytterligare exempel.
742 @iftex
743 @vfill@eject
744 @end iftex
746 @node Translation
747 @chapter Katalogöversättningar
748 @cindex Katalogöversättning
749 @cindex .ct
750 Katalogöversättningar påminner mycket om katalogbeskrivningar, förutom
751 att den innehåller andra kommandon, samt ingen information om sträng-ID och
752 längd (dessa tas från katalogöversättningen). Alla strängar från
753 katalogbeskrivningen måste finnas med i översättningen (FlexCat undviker
754 att skriva strängar som är identiska med orginalet till katalogen), och
755 inga fler identifierare får finnas med. Man kan enkelt försäkra sig om
756 detta genom att använda FlexCat för att skapa nya
757 katalogöversättningar. @xref{Survey, översikt}.
759 De kommandon som tillåts i en katalogöversättning är:
761 @table @code
762 @item ##version <sträng>
763 Anger katalogens version i form av en versionssträng i AmigaDOS-format.
764 Exempel:
766 @example
767 @samp{##version $VER: FlexCat.catalog 8.2 (25.8.97)}
768 @end example
770 Versionen på denna katalog är 8. Sålunda måste katalogbeskrivningens
771 versionsnummer vara 0 eller 8.
773 Du kan ersätta datumet (här @samp{27.09.93}) med det speciella nyckelordet
774 @samp{$TODAY}. När katalogen skapas, kommer @samp{$TODAY} att ersättas med
775 det aktuella datumet (observera att bara den första förekomsten av @samp{$TODAY}
776 i @samp{$VER}-strängen kommer att behandlas). Om du vill att dina kataloger
777 alltid skall vara aktuella, ange alltså:
779 @example
780 @samp{$VER: FlexCat.catalog 3.1 ($TODAY)}
781 @end example
783 @item ##rcsid $Date: 2007-01-01 03:48:17 +0100 (Mo, 01. Jan 2007) $ $Revision: 73 $
784 @itemx $Id: FlexCat_swedish.texinfo 73 2007-01-01 02:48:17Z tactica $
785 kan användas tillsammans med ett revisionskontrollsystem istället för
786 ##version (allt skall givetvis vara på en och samma rad). @samp{<datum>} är
787 datumet på formen @samp{åå/mm/dd}, @samp{<tid>} är tiden (ignoreras),
788 @samp{<rev>} är revisionen och @samp{<namn>} är namnet som används i
789 versionsträngen.
791 @item ##name <namn>
792 finns med för kompatibilitet med CatComp. Det ersätter
793 @samp{<namn>}-argumentet i @code{##rcsid}-kommandot.
795 @item ##language <sträng>
796 Katalogens språk. Naturligtvis skall detta vara ett annat språk än det som
797 används i katalogbeskrivningen. Kommandona @samp{##language} och
798 @samp{##version} måste finnas med i en katalogöversättning.
800 @item ##codeset <nummer>
801 Används för tillfället inte, och måste vara 0. Detta är det förvalda värdet.
803 @item ## chunk <ID> <sträng>
804 Lägger till IFF-blocket @samp{<ID>} till katalogen, innehållande den
805 angivna <sträng>. Används oftast för att lägga till en kommentar till en
806 katalog. Exempel:
808 @example
809 ## chunk AUTH Tysk översättning av Jochen Wiedmann
810 @end example
812 @end table
814 @cindex Deutsch.ct
815 Enligt ovanstående ser alltså vårt exempel ut så här i
816 katalogöversättningen:
818 @example
819     msgHello
820     Hallo, dies ist deutsch!\n
821 @end example
823 @noindent
824 Se @file{Deutsch.ct} för ytterligare ett exempel på en katalogöversättning.
828 @iftex
829 @vfill@eject
830 @end iftex
832 @node Source
833 @chapter Källkodsbeskrivningar
834 @cindex Källkodsbeskrivning
835 @cindex .sd
836 Detta är den speciella delen av FlexCat. Hittils har det inte varit något
837 som inte CatComp, KitCat och andra program också kan göra. Den skapade
838 källkoden gör det enkelt att använda kataloger, utan att för den skull
839 förlora flexibilitet. Vilket programspråk som helst bör vara möjligt att
840 använda, och alla behov borde kunna uppfyllas. Det låter kanske som en
841 motsägelse, men FlexCats lösning på detta problem är
842 källkodsbeskrivningarna, som innehåller en mall för hur källkoden skall
843 skall se ut. Dessa kan redigeras på samma sätt som katalogbeskrivningar och
844 katalogöversättningar. Alltså kan FlexCat generera i princip godtycklig kod.
846 Källkodsbeskrivningarna genomsöks efter vissa speciella symboler, som
847 ersätts med vissa värden. Möjliga symboler är bakstreckstecknena enligt
848 ovan, och ytterligare sekvenser som börjar med ett @samp{%}-tecken (detta
849 är välbekant för C-programmerare).
851 @table @samp
852 @item %b
853 är basnamnet på katalogbeskrivningen. @xref{Program start, programstart}.
855 @item %v
856 är versionsnumret på katalogbeskrivningen. Blanda inte ihop detta med
857 katalogversionen från katalogöversättningen.
859 @item %l
860 är katalogbeskrivningens språk. Observera att detta matas in som en sträng.
861 Se @samp{%s} nedan.
863 @item %n
864 är antalet strängar i katalogbeskrivningen.
866 @item %%
867 är tecknet @samp{%}.
868 @end table
870 De viktigaste är följande sekvenser. De representerar katalogsträngarna på
871 olika sätt. Rader innehållande en eller flera av följande symboler upprepas
872 en gång för varje sträng.
874 @table @samp
876 @item %i
877 är identifieraren från katalogbeskrivningen.
879 @item %nd
880 @itemx %nx
881 @itemx %nc
882 är ID-numret för strängen i decimal, hexadecimal respektive oktal notation.
883 Numret @samp{n} säger åt FlexCat hur många tecken ID-numret skall använda
884 (strängen fylls med noll till vänster till den önskade längden). Om du inte
885 anger @samp{n} kommer ID-numret bara att använda det antal tecken som
886 behövs.
888 @item %e
889 är numret på den aktuella strängen. Räknaren börjar från 0.
891 @item %s
892 är strängen själv. Hur denna skall matas in beror på programspråket som
893 används, och kan kontrolleras med kommandona @samp{##stringtype} och
894 @samp{##shortstrings}.
896 @item %na
897 är strängens ID. Skillnaden mellan @samp{%na} och t.ex.@: @samp{%nx} är att
898 @samp{%na} genererar strängens ID @strong{separerad} till enstaka tecken:
900 @example
901 @samp{%2a} i källkodsbeskrivningen resulterar i @samp{\x00\x20}
902 @end example
904 Om du inte anger @samp{n}, kommer ID-numret att bli fyra tecken.
906 @item %nt
907 är strängens längd. Observera att det värdet alltid är @strong{jämnt}.
909 @item %z
910 bör användas tillsammans med @samp{%nt}. Eftersom @samp{%nt} alltid
911 resulterar i ett jämnt värde, kan en beskrivningsrad som:
913 @example
914 static const char Block[] =
916      "%2a" "%2t" %s "%z"
918 @end example
920 orsaka problem, speciellt när man tolkar en sådan tabell, eftersom
921 @samp{%2t} kan vara jämn, medans strängens längd är udda! När tabellen
922 tolkas kan du läsa eller hoppa över ett tecken för mycket (jag antar
923 konsekvenserna är kända). För att undvika detta introduerades @samp{%z}.
924 FlexCat ersätter den med så många tecken (@samp{\x00}) som strängen saknar
925 för att längden skall bli jämn. Om strängen är tre tecken lång, ger
926 @samp{%nt} @samp{4}, och @samp{%z} lägger till en @samp{\x00}.
928 @item %(...)
929 matar in texten mellan paranteserna för varje sträng utom den sista. Detta
930 kan behövas i vektorer, om posterna i vektorn skall separeras med komma, men
931 den sista posten inte får följas av ett komma. Du kan använda @samp{(,)} i
932 så fall. Observera att inom paranteser ersätts inte några
933 @samp{%}-sekvenser. Bakstrecksekvenser ersätts dock fortfarande.
935 @end table
937 Kontrollsekvenserna @samp{%l} och @samp{%s} skapar strängar. Hur strängarna
938 ser ut beror på programspråket i fråga. Därför kan man ha kommandorader i
939 källkodsbeskrivningen liknande dem i t.ex.@: katalogöversättningen. Dessa
940 kommandon måste börja på första positionen på en rad, och det kan bara
941 finnas ett kommando per rad. Möjliga kommandon är:
943 @table @code
944 @item ##shortstrings
945 gör så att långa strängar delas upp på flera raader. Detta är inte alltid
946 möjligt, eller kanske inte implementerad FlexCat. Sålunda är det normala
947 att skapa en sträng, som kanske är mycket lång.
949 @item ##stringtype <typ>
950 Talar om för FlexCat hur strängarna skall se ut. Möjliga typer är:
952 @table @strong
953 @item None
954 Inga extra tecken; en ren kopia av strängen infogas, och inget annat.
955 Binära tecken (bakstegsekvenser) är inte möjliga.
957 @item C
958 skapar strängar i C-format. Strängarna föregås och följs av tecknet
959 @samp{"}. Strängar delas med @samp{"\} på slutet av raden, och @samp{"} på
960 början av nästa rad. (Baksteget behövs i makron.) Binära tecken infogas
961 som @samp{\OOO}. @xref{C, C}.
963 @item Oberon
964 ser ut som strängtypen C, utom det avslutande baksteget på slutet av rader.
965 @xref{Oberon, Oberon}. Denna strängtyp rekommenderas även för Modula-2.
967 @item Assembler
968 Strängas skapas med @samp{dc.b}. Läsbara ASCII-tecken föregås och följs av
969 tecknet @samp{'}; binära tecken infogas som @samp{$XX}. @xref{Assembler,
970 assembler}.
972 @item E
973 Strängar föregås och följs av tecknet @samp{'}. Ett @samp{+}-tecken binder
974 samman strängar som har delats upp på flera rader. Binära tecken infogas
975 som i C.
976 @end table
977 @end table
979 Låt oss se på ett utdrag från filen @file{C_h.sd}, som skapar en
980 inkluderingsfil för programspråket C:
982 @example
983 ##stringtype C
984 ##shortstrings
986 /* Se till att vi bara inkluderas en gång. */
987 #ifndef %b_CAT_H
988 #define %b_CAT_H
990 /* Läs andra inkluderingsfiler. */
991 #include <exec/types.h>
992 #include <libraries/locale.h>
994 /* Funktionsprototyper */
995 extern void Open%bCatalog( struct Locale *, STRPTR );
996 extern void Close%bCatalog( void );
997 extern STRPTR Get%bString( LONG );
999 /* Definitioner för identifierarna samt deras ID-nummer. */
1000 /* Den här raden kommer att upprepas för varje sträng.   */
1001 #define %i %d
1003 #endif
1004 @end example
1006 För den sökväg som används för källkodsbeskrivningar, se @ref{Program
1007 start, programstart}.
1012 @iftex
1013 @vfill@eject
1014 @end iftex
1016 @node Using source
1017 @chapter Använda källkoden i egna program
1018 @cindex Använda källkoden
1019 @cindex FlexCat-källkod
1020 Hur du använder källkoden beror naturligtvis på vilken källkod som skapas,
1021 och därmed på källkodsbeskrivningen som används. Vad vi talar om här är de
1022 källkodsbeskrivningar som följer med FlexCat. @xref{Source,
1023 källkodbeskrivning}.
1025 Alla källkodsbeskrivningar borde göra det möjligt att använda programmen
1026 utan @code{locale.library}. En global variabel kallad @samp{LocaleBase}
1027 (@samp{_LocaleBase} för assembler) måste dock finnas, och initieras med
1028 NULL eller med ett anrop till @cite{Exec/OpenLibrary}. Lokalisering är inte
1029 möjlig om @code{LocaleBase} är NULL, såvida inte källkodsbeskrivningen
1030 @file{C_c_V20.sd} används. Denna beskrivning möjliggör lokalisering under
1031 AmigaOS 2.0 genom att ersätta @code{locale.library} med
1032 @code{iffparse.library} (plus lite egen kod). (En variabel kallad
1033 @code{IFFParseBase} måste finnas för att detta skall fungera, och den
1034 behöver initieras på liknande sätt som @samp{LocaleBase}.) @xref{C, C}.
1035 Programmeraren behöver inte veta hur dessa bibliotek används, utom när han
1036 skapar egna källkodsbeskrivningar.
1038 Det finns tre funktioner, och de är ganska enkla att använda.
1039 @deffn {} OpenCatalog( locale, language )
1040 Denna funktion öppnar eventuellt en katalog. Argumentet @code{locale} är en
1041 pekare till en Locale-struktur, och @code{language} är en sträng som
1042 innehåller namnet på det språk för vilket en katalog skall öppnas. I de
1043 flesta fall är dessa båda @samp{NULL} eller @samp{NIL}, eftersom
1044 användarens val inte används annars. Se @cite{Locle/OpenCatalog} för mer
1045 information.
1047 Icke objektorienderade språk (C, assembler, Modula) anropar normalt sett
1048 funktionen @code{OpenXXXCatalog}, där XXX är basnamnet på applikationen:
1049 Detta låter dig använda flera olika kataloger i ett och samma program.
1051 Om användaren har @samp{Deutsch} och @samp{Français} som de förvalda
1052 språken, och programmets basnamn är @samp{XXX}, så letar programmet efter
1053 följande filer:
1055 @example
1056 @file{ProgDir:Catalogs/Deutsch/XXX.catalog}
1057 @file{Locale:Catalogs/Deutsch/XXX.catalog}
1058 @file{ProgDir:Catalogs/Français/XXX.catalog}
1059 @file{Locale:Catalogs/Français/XXX.catalog}
1060 @end example
1062 @noindent
1063 där @file{ProgDir:} är den låda där programmet finns. (Ordningen mellan
1064 @file{ProgDir:} och @file{Locale:} kan ändras för att undvika en dialogruta
1065 i stil med @samp{Mata in disketten YYY}.)
1067 OpenCatalog är av typen void (en procedur för Pascal-programmerare), och
1068 returnerar därmed inte något värde.
1069 @end deffn
1071 @deffn {} GetString( ID )
1072 Returnerar en pekare till den sträng som motsvaras av det givna ID:n i
1073 katalogbeskrivningen. Dessa strängar ägs av @code{locale.library}, och får
1074 inte modifieras.
1076 Ett exempel kan vara användbart. Ta strängen från exemplet med
1077 katalogbeskrivningen, som kallades @code{msgHello}. Källkodsbeskrivningen
1078 deklarerar konstanten @samp{msgHello}, som representerar strängen. Denna
1079 sträng kan skrivas ut i C med:
1081 @example
1082 printf( "%s\n", GetString( msgHello ) );
1083 @end example
1084 @end deffn
1086 @deffn {} CloseCatalog()
1087 Den här funktionen friar katalogen (alltså det allokerade minnet) innan
1088 programmet avslutas. Du kan anropa den här funktionen när som helst, även
1089 före OpenCatalog anropas.
1090 @end deffn
1092 @menu
1093 * C::         FlexCat-källkod i C-program.
1094 * C++::       FlexCat-källkod i C++-program.
1095 * Oberon::    FlexCat-källkod i Oberon-program.
1096 * Modula-2::  FlexCat-källkod i Modula-2-program.
1097 * Assembler:: FlexCat-källkod i Assembler-program.
1098 * E::         FlexCat-källkod i E-program.
1099 * Appendix::  Stöd för flera kataloger.
1100 @end menu
1104 @iftex
1105 @vfill@eject
1106 @end iftex
1108 @node C
1109 @section FlexCat-källkod i C-program
1110 @cindex C
1111 @cindex C_c_V20.sd
1112 @cindex C_h.sd
1113 @cindex C_c_V21.sd
1114 @cindex AutoC_c.sd
1115 @cindex AutoC_h.sd
1116 @cindex Catcomp_h.sd
1117 @cindex Cat2h_c.sd
1118 @cindex Cat2h_h.sd
1119 C-källkoden består av två delar: En @file{.c}-fil som skall kompileras och
1120 användas som den är, samt en inkluderingsfil som ska inkluderas i alla
1121 källkodsfiler som använder katalogsträngar. Denna inkluderingsfil
1122 definierar alla strängars ID:n som makron.
1124 De C-kompilatorer jag kan (SAS/C, DICE och GCC) kan automatiskt öppna
1125 bibliotek och initiera katalogerna. Du behöver alltså inte anropa
1126 funktionerna @code{OpenCatalog} och @code{CloseCatalog}; kompilatorn gör
1127 det åt dig. Dessutom anropar @code{OpenCatalog} @code{GetString}-funktionen
1128 för alla katalogsträngar. Detta gör att du helt enkelt kan skriva
1129 @samp{msgHello} istället för @samp{GetString( msgHello )}.
1131 Om du definierar symbolen @code{LOCALIZE_V20} (@samp{-D LOCALIZE_V20} för
1132 DICE och GCC; @samp{DEF LOCALIZE_V20} för SAS/C), kommer du att få ett
1133 program som kan använda kataloger under OS 2.0: @code{locale.library}
1134 ersätts med @code{iffparse.library} i så fall. Ditt program behöver då även
1135 ett argument som @samp{LANGUAGE}, så att användaren kan ange vilket språk
1136 som skall användas. Funktionen @code{InitXXXCatalog} (där @samp{XXX} är
1137 basnamnet på ditt program) behöver anropas, med argumentet från
1138 @samp{LANGUAGE} som parameter. Denna parameter ignoreras naturligtvis om du
1139 har @code{locale.library}. (Det vore möjligt att göra liknande saker under
1140 OS 1.3, men jag vill inte stödja denna föråldrade version längre.)
1142 Du förlorar lite funktionalitet med denna källkodsbeskrivning: Till exempel
1143 kan du inte skicka med en @code{Locale}-struktur till @code{OpenCatalog}.
1144 De allra flesta programmen kommer dock inte att sakna något; andra behöver
1145 modifiera källkodsbeskrivningen.
1147 För ett exempel på ett program som använder dessa källkodsbeskrivningen, se
1148 @ref{Survey, översikten}.
1150 @samp{OBS:}
1152 I och med version 1.9 innehåller arkivet källkodsbeskrivningen
1153 @file{CatComp_h.sd}, som kan användas av program som använder mer än en
1154 katalog. Se den filen för hur du kan uppdatera de andra
1155 källkodsbeskrivningarna.
1157 Det finns också en ny källkodsbeskrivning av Magnus Holmgren <cmh@@lls.se>.
1158 Filerna @file{Cat2h_c.sd} och @file{Cat2h_h.sd} innehåller
1159 källkodsbeskrivningar som genererar kod liknande den som genereras av Cat2h
1160 av Nico François (och även av Cat2Inc av Magnus Holmgren ;). Den använder
1161 ett lite annorlunda sätt för att hantera strängar, som är kompakt och
1162 snabbt.
1164 Istället för att lagra alla strängar i en vektor, och söka igenom denna
1165 varje gång (som CatComp normalt sett gör; man kan undvika detta dock),
1166 lagras strängens ID i de två första tecknena av strängen.
1167 @code{GetString()}-funktionen, som då alltså tar en sträng som argument,
1168 läser de två första tecknena till ett långord, och därmed är strängens ID
1169 och den inbyggda strängen kända.
1171 I och med version 1.9 kan FlexCat generera den här sortens kod, via
1172 kommandot @code{%a}. De inkluderade filerna använder @code{%2a}, och
1173 använder alltså bara två byte för ID-nummer per string (som Cat2h gör).
1174 Detta torde räcka för de flesta program. Om du ändrar längden, kom ihåg att
1175 @code{GetString()}-funktionen också behöver ändras.
1177 Den genererade inkluderingsfilen definierar alla strängar, och
1178 källkodsfilen innehåller kod för att öppna och stänga katalogen (med
1179 automatisk initiering för SAS/C och DICE), och en lämplig
1180 @code{GetString()}-funktion. En snabb titt på den genererade koden borde
1181 vara nog för att se alla detaljer, tycker jag.
1183 Koden stödjer för tillfället inte flera kataloger, ej eller ändring av
1184 versionsnummer eller inbyggt språk. Enkelt att lägga till dock, om behovet
1185 skulle uppstå.
1189 @iftex
1190 @vfill@eject
1191 @end iftex
1193 @node C++
1194 @section FlexCat-källkod i C++-program.
1195 @cindex C++
1196 @cindex C++_cc.sd
1197 @cindex C++_h.sd
1198 @cindex C++_CatalogF.cc
1199 @cindex C++_CatalogF.h
1200 Att använda FlexCat-källkod i C++-program är mycket enkelt: Nästan allt
1201 görs av en speciell klass, som implementeras i filerna
1202 @file{C++_CatalogF.cc} och @file{C++_CatalogF.h}. All du behöver göra är
1203 att döpa om dessa filer till @file{CatalogF.cc} och @file{CatalogF.h},
1204 kompilera dem, och skapa ytterligare två filer genom att använda
1205 källkodsbeskrivningarna @file{C++_cc.sd} och @file{C++_h.sd}. Den första
1206 skapar filen med strängarna (som naturligtvis också måste kompileras), och
1207 den andra filen kommer att inkluderas i ditt program. Ett C++-program som
1208 använder FlexCat-källkod kan se ut så här:
1210 @example
1211 #include <iostream.h>
1212 extern "C"
1214 #include <clib/exec_protos.h>
1216 #include "CatalogF.h"
1217 #include "HelloLocalWorld_Cat.h"
1219 struct LocaleBase *LocaleBase = 0;
1221 int main()
1222 @{ // Du måste öppna bibliteket här, även om din kompilator
1223    // stödjer automatisk öppning: Det kommer vanligtvis att
1224    // avsluta programmet om locale.library inte kunde öppnas.
1225    // Det är inte vad vi vill här, eftersom vi då kommer att
1226    // använda de inbyggda strängarna istället.
1227    LocaleBase = ( struct LocaleBase * )
1228        OpenLibrary( "locale.library", 38 );
1230    const CatalogF cat( 0, 0, HelloLocalWorld_ARGS );
1232    cout >> cat.GetString( msgHelloLocalWorld );
1234    if (LocaleBase)
1235        CloseLibrary(LocaleBase);
1237 @end example
1239 En modifiering av GCCs @file{libauto.a} finns tillgänglig, som låter dig ta
1240 bort raderna som gäller variabeln @code{LocaleBase}.
1244 @iftex
1245 @vfill@eject
1246 @end iftex
1248 @node Oberon
1249 @section FlexCat-källkod i Oberon-program
1250 @cindex Oberon
1251 @cindex Oberon_V38.sd
1252 @cindex Oberon_V39.sd
1253 @cindex AmigaOberon
1254 @cindex Oberon-A
1255 Det finns några olika källkodsbeskrivningar: @file{AmigaOberon.sd} är gjord
1256 för den aktuella versionen av kompilatorn @code{AmigaOberon}.
1257 @file{Oberon_V39.sd} är för äldre versioner, och @file{Oberon_V38.sd}
1258 använder filen @file{Locale.mod} från Hartmut Goebel. @file{Oberon-A.sd}
1259 är, naturligtvis, för @code{Oberon-A}.
1261 Funktionsprototyperna är:
1263 @example
1264 XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
1265 XXX.GetString(num: LONGINT): Exec.StrPtr;
1266 XXX.CloseCatalog();
1267 @end example
1269 @noindent
1270 där @samp{XXX} är basnamnet från källkodsbeskrivningen.
1271 @xref{Source, källkodsbeskrivning}.
1273 Till slut ett exempel på hur man använder FlexCat-källkoden:
1275 @example
1276 MODULE HelloLocalWorld;
1278 IMPORT  x:=HelloLocalWorld_Cat; Dos;
1280 BEGIN
1281     x.OpenCatalog(NIL, "");
1283     Dos.PrintF("%s\n", x.GetString(x.msgHello));
1285     (* Katalogen kommer automatiskt att stängas *)
1286     (* när programmet avslutas.                 *)
1287 END Anything;
1288 @end example
1291 @iftex
1292 @vfill@eject
1293 @end iftex
1295 @node Modula-2
1296 @section FlexCat-källkod i Modula-2-program.
1297 @cindex Modula-2
1298 @cindex Modula2Def.sd
1299 @cindex Modula2Mod.sd
1300 Modula-2 har ett modulkoncept liknande det i Oberon. Detta betyder att
1301 funktionsnamnen är alltid samma. Till skillnad från Oberon behöver dock
1302 Modula-2 en implementations- och en deklarationsmodul. Därför behöver du
1303 skapa två filer, genom att använda källkodsbeskrivningarna
1304 @file{Modula2Def.sd} och @file{Modula2Mod.sd}. Dessa är anpassade för
1305 kompilatorn M2Amiga. Observera att du även behöver filen
1306 @file{OptLocalL.def} från version 4.3 av M2Amiga.
1308 Funktionsprototyperna är:
1310 @example
1311 PROCEDURE XXX.OpenCatalog(loc : ld.LocalePtr;
1312                           language : ARRAY OF CHAR);
1313 PROCEDURE XXX.CloseCatalog();
1314 PROCEDURE XXX.GetString(num : LONGINT) : ld.StrPtr;
1315 @end example
1317 @noindent
1318 där @samp{XXX} är basnamnet från källkodsbeskrivningen.
1319 @xref{Source, källkodsbeskrivning}.
1321 Till slut ett exempel på hur man använder FlexCat-källkoden:
1323 @example
1324 MODULE HelloLocalWorld;
1326 IMPORT hl: HelloLocalWorldLocale,
1327        io: InOut;
1329 BEGIN
1330     hl.OpenCatalog(NIL, "");
1332     io.WriteString(hl.GetString(hl.msgHello)); io.WriteLn;
1334     hl.CloseCatalog;
1335 END HelloLocalWorld.
1336 @end example
1339 @iftex
1340 @vfill@eject
1341 @end iftex
1343 @node Assembler
1344 @section FlexCat-källkod i assemblerprogram
1345 @cindex Assembler
1346 @cindex AztecAs_asm.sd
1347 @cindex AztecAs_i.sd
1348 Assemblerkällkoden har gjorts för att användas med Aztec-assemblern. Denna
1349 bör dock inte skilja sig så mycket från andra assemblatorer, och du bör
1350 kunna göra egna källkodsbeskrivningar. Källkoden består av två delar: En
1351 @file{.asm}-fil, som assembleras och länkas, samt en @file{.i}-fil, som
1352 definierar strängarnas ID, och måste inkluderas av de moduler som använder
1353 dem.
1355 Funktionsnamnen har ändrats lite för att tillåta användandet av
1356 olika kataloger i en fil: Dessa är @samp{OpenXXXCatalog},
1357 @samp{CloseXXXCatalog} och @samp{GetXXXString}, där @samp{XXX} är basnamnet
1358 från källkodsbeskrivningen. Konceptet har kopierats från GadToolsBox, och
1359 har visat sig fungera bra. @xref{Source, källkodsbeskrivning}.
1361 Som vanligt returneras funktionsresultatet i d0, och funktionerna ändrar
1362 inte på registrena d2-d7 och a2-a7. OpenCatalog förväntar sig sina argument
1363 i a0 (en pekare till Locale-strukturen) och a1 (en pekare till
1364 språksträngen), vilka för det mesta är NULL. GetString förväntar sig en
1365 pekare i a0. Du behöver inte bry dig om vad den pekar på.
1367 Till slut ett exempel på hur man använder FlexCat-källkoden:
1369 @example
1370 * HelloLocalWorld.asm
1372         include "XXX.i" ; Du måste inkludera denna. Den innehåller
1373                         ; "xref OpenHelloLocalWorldCatalog", ...
1375         xref    _LVOOpenLibrary
1376         xref    _LVOCloseLibrary
1377         xref    _AbsExecBase
1379         dseg
1381 LocNam: dc.b    "locale.library",0
1382         dc.l    _LocaleBase,4       ; Måste finnas med detta namn.
1384         cseg
1386 main:   move.l  #38,d0              ; Öppna locale.library
1387         lea     LocName,a1
1388         move.l  _AbsExecBase.a6
1389         jsr     _LVOOpenLibrary(a6)
1391 * Avsluta INTE, om OpenLibrary misslyckas
1393         sub.l   a0,a0               ; Öppna katalogen
1394         sub.l   a1,a1
1395         jsr     OpenHelloLocalWorldCatalog
1397         lea.l   msgHello,a0         ; Hämta en pekare till strängen
1398         jsr     GetHelloLocalWorldString
1399         jsr     PrintD0             ; och skriv ut strängen
1401 Ende:
1402         jsr     CloseHelloLocalWorldCatalog ; Stäng katalogen
1403         move.l  _LocaleBase,a1      ; Stäng locale.library
1404         move.l  a1,d0               ; Denna test måste göras under 1.3
1405         beq     Ende1
1407         jsr     CloseLibrary
1408 Ende1:
1409         rts
1410         end
1411 @end example
1416 @iftex
1417 @vfill@eject
1418 @end iftex
1420 @node E
1421 @section FlexCat-källkod i E-program
1422 @cindex E
1423 @cindex E21b.sd
1424 @cindex E30b.sd
1425 I och med version 3.0 kan ett E-program delas upp i moduler. Den följande
1426 beskrivningen beskriver hur @file{E30b.sd} används, som fungerar med E
1427 version 3.0b eller högre. (Version 3.0a hade allvarliga fel; för tidigare
1428 versioner kan man använda @file{E21b.sd}, vilket kräver att man manuellt
1429 infogar den genererade koden i den egna koden.)
1431 @file{E30b.sd} skapar en modul som heter @file{Locale}, som innehåller en
1432 variabel, @code{cat}, av typen @samp{catalog_XXX}, där @samp{XXX} är
1433 basnamnet från källkodsbeskrivningen. @xref{Source, källkodsbeskrivning}.
1434 Filen @file{HelloLocalWorld.e} kan se ut något sådant här:
1436 @example
1437 MODULE '*Locale'
1438     -> Använd den här modulen.
1440 DEF cat : PTR TO catalog_HelloLocalWorld
1441     -> Den här variablen innehåller alla strängarna i
1442     -> katalogen, samt några metoder. Du måste deklarera
1443     -> den i alla moduler som använder lokalisering, men
1444     -> initiera den bara i huvudmodulen.
1446 PROC main()
1447     localebase := OpenLibrary('locale.library', 0)
1448         -> Öppna locale.library; avsluta @strong{inte} om den
1449         -> inte kunde öppnas: Vi kommer att använda de
1450         -> inbyggda strängarna i så fall.
1452     NEW cat.create()
1453     cat.open()
1454         -> Som redan har nämnts, detta skall bara göras i
1455         -> huvudmodulen.
1457     WriteF('\s\n', cat.msg_Hello_world.getstr())
1458         -> cat.msg_Hello_world är en av de strängar som
1459         -> finns i cat. Den här strängen deklarerar en
1460         -> metod, getstr(), som läser katalogen och
1461         -> returnerar en pekare till den lokaliserade
1462         -> strängen.
1464     cat.close()
1465     IF localebase THEN CloseLibrary(localebase)
1466 ENDPROC
1467 @end example
1471 @iftex
1472 @vfill@eject
1473 @end iftex
1475 @node Appendix
1476 @section Stöd för flera kataloger
1477 @cindex CatComp_h.sd
1479 De flesta källkodsbeskrivningar som är tillgängliga för tillfället kan inte
1480 användas i program som öppnar mer än en katalog. I senare distributioner
1481 kommer detta säkerligen att ändras, och uppdaterade källkodsbeskrivningar
1482 kommer att vara en del av de distributionerna.
1484 För tillfället följer det med ett exempel av en sådan källkodsbeskrivning.
1485 Se @samp{CatComp_h.sd} för att se hur beskrivningen kan justeras för att
1486 undvika att få flera symboler med samma namn och liknande. Med några få
1487 ord: Använd @samp{%b} som prefix, suffix eller infix i varje namn som är en
1488 viktig del av källkoden (och som dessutom är globalt synliga). Om din
1489 tabell med strängar heter @samp{String}, ersätt den med @samp{%b_Strings},
1490 och du kommer inte längre att få flera symboler med samma namn.
1492 @samp{CatComp_h.sd} producerar källkod som liknar den som CatComp
1493 genererar, och kan användas av de som vill använda FlexCat, men inte vill
1494 nämnvärt ändra sina program.
1496 @iftex
1497 @vfill@eject
1498 @end iftex
1500 @node Future
1501 @unnumbered Vidare utveckling av FlexCat
1502 @cindex Framtid
1503 @cindex FlexCat
1504 @cindex Bidrag
1505 Även om FlexCat verkar vara så gott som klart, har jag några poster kvar på
1506 min "att göra" lista. Och jag är naturligtvis öppen för förslag, tips eller
1507 kritik. Speciellt kan jag lägga till nya strängtyper, eftersom detta kan
1508 göras med mycket små ändringar.
1510 Jag vore mycket tacksam om någon skickade mig nya källkodsbeskrivningar och
1511 om jag kunde inkludera dem i framtida distributioner. Vilket programspråk
1512 som helst, och vilka utökningar som helst, under förutsättning att de har
1513 visat sig fungera bra genom tester i riktiga program. Se @ref{Support,
1514 support} för kontaktadresser.
1516 @node Support
1517 @unnumbered FlexCat-support
1518 @cindex Support
1520 För programuppdateringar, besök hemsidan för FlexCat vid:
1521 @example
1522 http://amiga.com.pl/flexcat/
1523 @end example
1525 Om du har några förslag eller felrapporter, skicka e-post till:
1528 @example
1529 carlos@@amiga.com.pl
1530 @end example
1532 eller via vanlig post:
1534 @example
1535 Marcin Orlowski
1536 ul. Radomska 38
1537 71-002 Szczecin
1538 Poland
1539 @end example
1541 @iftex
1542 @vfill@eject
1543 @end iftex
1546 @node Credits
1547 @unnumbered Tack till
1548 @cindex Tack till
1550 @samp{Jochen Wiedmanns tack går till:}
1552 @table @strong
1553 @item Albert Weinert
1554 för KitCat, föregångaren till FlexCat, som har gjort värdefulla saker för
1555 mig, men till slut inte var flexibel nog, samt för källkodsbeskrivningen för
1556 Oberon.
1558 @item Reinhard Spisser und Sebastiano Vigna
1559 för Amiga-versionen av TexInfo, som användes för den här dokumentationen.
1561 @item The Free Software Foundation
1562 för den ursprungliga versionen av TexInfo, och många andra utmärkta
1563 program.
1565 @item Matt Dillon
1566 för DICE och speciellt DME.
1568 @item Alessandro Galassi
1569 för den italienska översättningen.
1571 @item Lionel Vintenat
1572 för källkodsbeskrivningen för E samt dess dokumentation, den franska
1573 översättningen, samt för felrapporter.
1575 @item Antonio Joaquín Gomez Gonzalez (u0868551@@oboe.etsiig.uniovi.es)
1576 för källkodsbeskrivningen för C++, den spanska översättningen av både
1577 program och manual, och för det mycket bra förslaget för att snabba upp
1578 GetString-funktionen.
1580 @item Olaf Peters (op@@hb2.maus.de)
1581 för källkodsbeskrivningen för Modula-2.
1583 @item Russ Steffen (steffen@@uwstout.edu)
1584 för att ha föreslagit FLEXCAT_SDDIR-variabeln.
1586 @item Lauri Aalto (kilroy@@tolsun.oulu.fi)
1587 för den finska översättningen.
1589 @item Marcin Orlowski (carlos@@inet.com.pl)
1590 för den polska översättningen, och för underhållet av det polska
1591 locale-paketet.
1593 @item Udo Schuermann (walrus@@wam.umd.edu)
1594 för att ha föreslagit WARNCTGAPS-flaggan och ##chunk-kommandot.
1596 @item Christian Hoj (cbh@@vision.auc.dk)
1597 für die dänische Quelltextbeschreibung
1599 @item Personerna på #AmigaGer
1600 för att ha svarat på många dumma frågor, och för mycket roligt. Till
1601 exempel stefanb (Stefan Becker), PowerStat (Kai Hoffmann), ill (Markus
1602 Illenseer), Quarvon (Jürgen Lang), ZZA (Bernhard Möllemann), Tron (Mathias
1603 Scheler), mungo (Ignatios Souvlatzis), jow (Jürgen Weinelt) och Stargazer
1604 (Petra Zeidler).
1606 @item Commodore
1607 för Amiga och Kickstart 2.0. Fortsätt utveckla Amigan, och jag kommer att
1608 vara en Amiga-användare för de nästa åtta åren också. ;-)
1609 @end table
1613 @samp{Marcins tack går till:}
1615 @table @strong
1617 @item Jochen Wiedmann
1618 för att ha skapat FlexCat.
1620 @item Magnus Holmgren <cmh@@lls.se>
1621 för källkodsbeskrivningen Cat2h.
1623 @item Medlemmar i @strong{Amiga Translators' Organization} <http://ato.vapor.com/ato/>
1624 för att ha skapat nya översättningar, och uppdaterat existerande översättningar:
1626 @table @strong
1627 @item Serbiska
1628 av Ljubomir Jankovic <lurch@@afrodita.rcub.bg.ac.yu>.
1630 @item Tjeckiska
1631 av Vit Sindlar <xsindl00@@stud.fee.vutbr.cz>.
1633 @item Svenska
1634 av Magnus Holmgren <cmh@@lls.se> och Hjalmar Wikholm <hjalle@@canit.se>.
1636 @item Finska
1637 uppdaterad av Mika Lundell <c71829@@uwasa.fi>.
1639 @item Italienska
1640 omarbetad av Luca Nora <ln546991@@silab.dsi.unimi.it> och Giovanni Addabbo
1641 <gaddabbo@@imar.net>.
1643 @end table
1645 @end table
1648 @iftex
1649 @vfill@eject
1650 @end iftex
1652 @node History
1653 @chapter Utveklingshistoria
1654 @cindex Historia
1655 @cindex Ändringar
1657 Utvecklingshistorien för FlexCat finns i filen @file{FlexCat.history}, som
1658 är en del av distributionsarkivet.
1661 @headings off
1662 @node Index
1663 @unnumbered Index
1664 @printindex cp
1666 @contents
1668 @bye