4 @setfilename FlexCat_svenska.guide
5 @settitle FlexCat @value{VERSION} Dokumentation
8 @c $VER: FlexCat_svenska.texinfo 2.0
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
24 @set Footnotestring Fotnoter
25 @set Chapterstring Kapitel
26 @set Appendixstring Appendix
27 @set Sectionstring Sektion
28 @set sectionstring sektion
41 @subtitle{Den flexibla kataloggeneratorn}
43 @subtitle{Version @value{VERSION}}
44 @author Jochen Wiedmann och Marcin Orlowski
45 @vskip 0pt plus 1filll
47 @halign{@hfil#&#@hfil@cr
48 Sedan version 1.8 utvecklas FlexCat av:@cr
55 & carlos@@amiga.com.pl@cr
56 & http://amiga.com.pl/flexcat/@cr
58 FlexCat skapades av:@cr
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.
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
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.
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.
101 * Anvsvarsfråntagande: Disclaimer. Upphovsrätt, (INGEN) garanti
102 * Översikt: Survey. Vad är FlexCat?
103 * Installation: Installation. Hur får jag det att fungera?
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
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
131 @chapter Upphovsrätt och anndra rättsliga saker
142 Upphovsrätt @copyright{} 1993-1999 Jochen Wiedmann och Marcin Orlowski
149 Sedan version 1.8 utvecklas programmet av
157 http://amiga.com.pl/flexcat/
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.
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
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
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
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:
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);
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
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:
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:
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!
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.
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:
270 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c.sd}
271 @samp{FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd}
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
281 @samp{FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct}
285 Den här filen skulle nu se ut så här:
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.
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
325 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog}
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:
339 @samp{FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct}
343 Allt du behöver göra nu är att översätta eventuella nya strängar.
352 @chapter Installation
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.
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,
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}.
394 @chapter Använda FlexCat i ett skal
398 FlexCat är ett skalbaserat program, och kan inte användas från Workbench.
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
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,
417 Vad argumenten används till:
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}.
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.
436 är namnet på den katalogfil som skall skapas. Detta argument kräver att
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
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:
459 @samp{FlexCat FlexCat.cd FlexCat_Cat.c=Templates/C_c_V20.sd}
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}.
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
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.
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
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!
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
514 OBS: FLUSH fungerar bara när du skapar en katalog. Annars kommer den att
520 @samp{FlexCat Test.cd Test.ct CATALOG Test.catalog FLUSH}
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
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).
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.
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.)
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.
570 För fler exempel på kommandorader, se @ref{Survey, översikten}.
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:
593 SDDIR/K,WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,QUIET/S
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.
612 @chapter Katalogbeskrivningar
613 @cindex Katalogbeskrivning
615 En katalogbeskrivning innehåller fyra olika sorters rader.
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
624 En rad som börjar med ett "#" (med samma undantag som ovan) antas vara
625 kommandorader. Följande kommandon kan användas:
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}.
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
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}.
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
669 @cindex Kontrolltecken
671 som innehåller strängen, och inget annat. Dessa strängaar kan innehålla
672 vissa kontrolltecken, som börjar med ett bakstreck:
679 Kontrollsekvensstart (ASCII 155)
685 Sidmatning (ASCII 12)
691 Radmatning (ASCII 10)
700 Vertikal tab (ASCII 11)
703 Avslutande parantes, som kan behövas som en del av sekvensen @samp{(..)},
704 se @ref{Source, källkodsbeskrivning}.
710 Tecknet som anges av ASCII-koden @samp{HH}, där @samp{HH} är hexadecimala
714 Tecknet som anges av ASCII-koden @samp{OOO}, där @samp{OOO} är oktala
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
725 En sträng anges alltså av en beskrivningsrad, samt den följande
726 strängraden. Ett exempel:
730 Hello, this is english!\n
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
747 @chapter Katalogöversättningar
748 @cindex Katalogöversättning
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:
762 @item ##version <sträng>
763 Anger katalogens version i form av en versionssträng i AmigaDOS-format.
767 @samp{##version $VER: FlexCat.catalog 8.2 (25.8.97)}
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å:
780 @samp{$VER: FlexCat.catalog 3.1 ($TODAY)}
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
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
809 ## chunk AUTH Tysk översättning av Jochen Wiedmann
815 Enligt ovanstående ser alltså vårt exempel ut så här i
816 katalogöversättningen:
820 Hallo, dies ist deutsch!\n
824 Se @file{Deutsch.ct} för ytterligare ett exempel på en katalogöversättning.
833 @chapter Källkodsbeskrivningar
834 @cindex Källkodsbeskrivning
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).
853 är basnamnet på katalogbeskrivningen. @xref{Program start, programstart}.
856 är versionsnumret på katalogbeskrivningen. Blanda inte ihop detta med
857 katalogversionen från katalogöversättningen.
860 är katalogbeskrivningens språk. Observera att detta matas in som en sträng.
864 är antalet strängar i katalogbeskrivningen.
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.
877 är identifieraren från katalogbeskrivningen.
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
889 är numret på den aktuella strängen. Räknaren börjar från 0.
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}.
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:
901 @samp{%2a} i källkodsbeskrivningen resulterar i @samp{\x00\x20}
904 Om du inte anger @samp{n}, kommer ID-numret att bli fyra tecken.
907 är strängens längd. Observera att det värdet alltid är @strong{jämnt}.
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:
914 static const char Block[] =
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}.
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.
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:
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:
954 Inga extra tecken; en ren kopia av strängen infogas, och inget annat.
955 Binära tecken (bakstegsekvenser) är inte möjliga.
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}.
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.
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,
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
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:
986 /* Se till att vi bara inkluderas en gång. */
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. */
1006 För den sökväg som används för källkodsbeskrivningar, se @ref{Program
1007 start, programstart}.
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
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
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}
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.
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
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:
1082 printf( "%s\n", GetString( msgHello ) );
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.
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.
1109 @section FlexCat-källkod i C-program
1116 @cindex Catcomp_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}.
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
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
1194 @section FlexCat-källkod i C++-program.
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:
1211 #include <iostream.h>
1214 #include <clib/exec_protos.h>
1216 #include "CatalogF.h"
1217 #include "HelloLocalWorld_Cat.h"
1219 struct LocaleBase *LocaleBase = 0;
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 );
1235 CloseLibrary(LocaleBase);
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}.
1249 @section FlexCat-källkod i Oberon-program
1251 @cindex Oberon_V38.sd
1252 @cindex Oberon_V39.sd
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:
1264 XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
1265 XXX.GetString(num: LONGINT): Exec.StrPtr;
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:
1276 MODULE HelloLocalWorld;
1278 IMPORT x:=HelloLocalWorld_Cat; Dos;
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. *)
1296 @section FlexCat-källkod i Modula-2-program.
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:
1311 PROCEDURE XXX.OpenCatalog(loc : ld.LocalePtr;
1312 language : ARRAY OF CHAR);
1313 PROCEDURE XXX.CloseCatalog();
1314 PROCEDURE XXX.GetString(num : LONGINT) : ld.StrPtr;
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:
1324 MODULE HelloLocalWorld;
1326 IMPORT hl: HelloLocalWorldLocale,
1330 hl.OpenCatalog(NIL, "");
1332 io.WriteString(hl.GetString(hl.msgHello)); io.WriteLn;
1335 END HelloLocalWorld.
1344 @section FlexCat-källkod i assemblerprogram
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
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:
1370 * HelloLocalWorld.asm
1372 include "XXX.i" ; Du måste inkludera denna. Den innehåller
1373 ; "xref OpenHelloLocalWorldCatalog", ...
1375 xref _LVOOpenLibrary
1376 xref _LVOCloseLibrary
1381 LocNam: dc.b "locale.library",0
1382 dc.l _LocaleBase,4 ; Måste finnas med detta namn.
1386 main: move.l #38,d0 ; Öppna locale.library
1388 move.l _AbsExecBase.a6
1389 jsr _LVOOpenLibrary(a6)
1391 * Avsluta INTE, om OpenLibrary misslyckas
1393 sub.l a0,a0 ; Öppna katalogen
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
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
1421 @section FlexCat-källkod i E-program
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:
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.
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.
1454 -> Som redan har nämnts, detta skall bara göras i
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
1465 IF localebase THEN CloseLibrary(localebase)
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.
1501 @unnumbered Vidare utveckling av FlexCat
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.
1517 @unnumbered FlexCat-support
1520 För programuppdateringar, besök hemsidan för FlexCat vid:
1522 http://amiga.com.pl/flexcat/
1525 Om du har några förslag eller felrapporter, skicka e-post till:
1529 carlos@@amiga.com.pl
1532 eller via vanlig post:
1547 @unnumbered Tack till
1550 @samp{Jochen Wiedmanns tack går till:}
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
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
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
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
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å. ;-)
1613 @samp{Marcins tack går till:}
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:
1628 av Ljubomir Jankovic <lurch@@afrodita.rcub.bg.ac.yu>.
1631 av Vit Sindlar <xsindl00@@stud.fee.vutbr.cz>.
1634 av Magnus Holmgren <cmh@@lls.se> och Hjalmar Wikholm <hjalle@@canit.se>.
1637 uppdaterad av Mika Lundell <c71829@@uwasa.fi>.
1640 omarbetad av Luca Nora <ln546991@@silab.dsi.unimi.it> och Giovanni Addabbo
1641 <gaddabbo@@imar.net>.
1653 @chapter Utveklingshistoria
1657 Utvecklingshistorien för FlexCat finns i filen @file{FlexCat.history}, som
1658 är en del av distributionsarkivet.