UNIT HelloWorldLocale;
INTERFACE

{****************************************************

This file was created automatically by 'FlexCat 2.3'
from "HelloWorld.cd".

Do NOT edit by hand!

****************************************************}

USES
  Exec , Locale , Utility ;

CONST
  MSG_HELLO = 0 ;
  MSG_HELLO_STR = 'HELLO WORLD!'#0;

  MSG_BYE = 1 ;
  MSG_BYE_STR = 'BYE!'#0;


PROCEDURE CloseCatalog;

PROCEDURE OpenCatalog(loc : pLocale ; language : STRPTR ) ;

FUNCTION GetString(num : LONGINT) : STRPTR ;

FUNCTION GetPasString(num : LONGINT) : STRING;

IMPLEMENTATION 

CONST
  builtinlanguage = 'english'#0;
  version = 0 ;
  catalog  : pCatalog = NIL ;

VAR

  OldExitProc : Pointer;

TYPE

  tAppString = RECORD
     id  : LONGINT ;
     str : STRPTR ;
  END ;

  tAppStringArray = ARRAY [0..2] OF tAppString ;

CONST
  AppStrings : tAppStringArray = (( id : 0 ; str : NIL ));  

FUNCTION CPtr( s : string ):pointer;INLINE
  $201F, { move.l (a7)+,d0 ; get address string }
  $5280, { addq.l #1,d0    ; ignore counter }
  $2E80; { move.l d0,(a7)  ; return "C-string" address }

PROCEDURE CloseCatalog;
BEGIN
  IF catalog <> NIL THEN
    BEGIN
      Locale.CloseCatalog(catalog) ;
      catalog := NIL
    END;
END; 

PROCEDURE InitAppStringsArray;
BEGIN
  AppStrings[0].id := MSG_HELLO;
  AppStrings[0].str := CPtr(MSG_HELLO_STR);

  AppStrings[1].id := MSG_BYE;
  AppStrings[1].str := CPtr(MSG_BYE_STR);

END;

PROCEDURE OpenCatalog(loc : pLocale ; language : STRPTR );
VAR
   tags   : ARRAY [0..7] OF LONGINT ;
BEGIN
  CloseCatalog;
  IF (catalog = NIL) AND (LocaleBase <> NIL) THEN
    BEGIN
      IF language <> NIL THEN
        BEGIN
          tags[0] := OC_BuiltInLanguage; tags[1] := long(CPtr(builtinlanguage));
          tags[2] := OC_Language ;       tags[3] := long(language); 
          tags[4] := OC_Version ;        tags[5] := version;
          tags[6] := TAG_END;
        END
      ELSE
        BEGIN
          tags[0] := OC_BuiltInLanguage; tags[1] := long(CPtr(builtinlanguage));
          tags[2] := OC_Version ;        tags[3] := version;
          tags[4] := TAG_END;
        END;
    catalog := Locale.OpenCatalogA(loc, CPtr('HelloWorld.catalog'#0), @tags) ;
    END 
END;

FUNCTION GetString(num : LONGINT) : STRPTR ;

VAR
  i       : LONGINT ;
  default : STRPTR ;

BEGIN
  i := 0 ;

  WHILE (i < 2) AND (AppStrings[i].id <> num) DO
  BEGIN
    INC(i)
  END ;

  IF i <> 2 THEN
    default := AppStrings[i].str
   ELSE
    default := NIL ;

  IF catalog <> NIL THEN
    GetString := Locale.GetCatalogStr(catalog, num, default)
   ELSE
    GetString := default
END;

FUNCTION GetPasString(num : LONGINT) : STRING;
TYPE
  pa = ^ta;
  ta = PACKED ARRAY [0..MAXINT] OF CHAR;
VAR
  i    : INTEGER;
  sptr : pa;
  s    : STRING;
BEGIN
  sptr := pa(GetString( num ));
  s := '';
  i := 0;
  WHILE sptr^[i] <> #0 DO 
  BEGIN
    s := s + sptr^[i];
    INC(i)
  END;
  GetPasString := s
END;

(***************************************************************************)
(*                  << INIT AND EXIT PROCEDURE  >>                         *)
(***************************************************************************)

PROCEDURE InitFunction;
BEGIN
  LocaleBase := OpenLibrary( 'locale.library' , 38 );
  if LocaleBase = NIL then 
    BEGIN
      WRITELN( '*** ERROR *** locale.library ' );
      HALT
    END;
  InitAppStringsArray;
  OpenCatalog( NIL , NIL );
END;

PROCEDURE ExitFunction;
BEGIN
  if LocaleBase <> NIL then CloseLibrary( LocaleBase );
  CloseCatalog;
END;

PROCEDURE ExitHandler;
BEGIN
  ExitProc := OldExitProc;
  ExitFunction;
END;

PROCEDURE Initialize;
BEGIN
  OldExitProc := ExitProc;
  ExitProc := @ExitHandler;
  InitFunction;
END;

BEGIN
  Initialize;
END.
