/****************************************************************
   This file was created automatically by `KitCat V1.1ß'
   Do NOT edit by hand!
****************************************************************/

#ifndef CHAOS_CAT_H
#include "CHAOS_CAT.h"
#endif	/*  !CHAOS_CAT_H	    */

#include <string.h>

#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif	/*  !EXEC_MEMORY_H	    */
#ifndef LIBRARIES_IFFPARSE_H
#include <libraries/iffparse.h>
#endif	/*  !LIBRARIES_IFFPARSE_H   */

#ifndef CLIB_IFFPARSE_PROTOS_H
#include <clib/iffparse_protos.h>
#endif	/*  !CLIB_IFFPARSE_PROTOS_H */
#ifndef CLIB_LOCALE_PROTOS_H
#include <clib/locale_protos.h>
#endif	/*  !CLIB_LOCALE_PROTOS_H   */
#ifndef CLIB_DOS_PROTOS_H
#include <clib/dos_protos.h>
#endif	/*  !DOS_PROTOS_H	    */
#ifndef CLIB_EXEC_PROTOS_H
#include <clib/exec_protos.h>
#endif	/*  !EXEC_PROTOS_H	    */
#ifndef CLIB_UTILITY_PROTOS_H
#include <clib/utility_protos.h>
#endif	/*  !CLIB_UTILITY_PROTOS_H  */

#ifdef AZTEC_C
#ifndef __PRAGMAS_LOCALE_LIB_H
#include <pragmas/locale_lib.h>
#endif	/*  !PRAGMAS_LOCALE_LIB_H   */
#ifndef __PRAGMAS_IFFPARSE_LIB_H
#include <pragmas/iffparse_lib.h>
#endif	/*  !PRAGMAS_IFFPARSE_LIB_H */
#ifndef __PRAGMAS_DOS_LIB_H
#include <pragmas/dos_lib.h>
#endif	/*  !PRAGMAS_DOS_LIB_H	    */
#ifndef __PRAGMAS_EXEC_LIB_H
#include <pragmas/exec_lib.h>
#endif	/*  !PRAGMAS_EXEC_LIB_H     */
#ifndef __PRAGMAS_UTILITY_LIB_H
#include <pragmas/utility_lib.h>
#endif	/*  !PRAGMAS_UTILITY_LIB_H  */
#endif	/*  AZTEC_C		    */

static LONG ChaosVersion = 0;
static const STRPTR ChaosBuiltInLanguage = (STRPTR) "english";

struct KCChaosArrayType
{   LONG    cca_ID;
    STRPTR  cca_Str;
};

static const struct KCChaosArrayType KCChaosArray [] =
{
    {MSG_CDAT_SELECTION, (STRPTR)MSG_CDAT_SELECTION_STR},
    {MSG_NO_WRITE_FILE, (STRPTR)MSG_NO_WRITE_FILE_STR},
    {MSG_WRITE_ERROR, (STRPTR)MSG_WRITE_ERROR_STR},
    {MSG_NO_READ_FILE, (STRPTR)MSG_NO_READ_FILE_STR},
    {MSG_NO_CHAOS_FILE, (STRPTR)MSG_NO_CHAOS_FILE_STR},
    {MSG_READ_ERROR, (STRPTR)MSG_READ_ERROR_STR},
    {MSG_ATTENTION, (STRPTR)MSG_ATTENTION_STR},
    {MSG_CHANGES_MADE, (STRPTR)MSG_CHANGES_MADE_STR},
    {MSG_YES_NO, (STRPTR)MSG_YES_NO_STR},
    {MSG_NO_TOURNAMENT_INPUT_WINDOW, (STRPTR)MSG_NO_TOURNAMENT_INPUT_WINDOW_STR},
    {MSG_NO_PAIRING, (STRPTR)MSG_NO_PAIRING_STR},
    {MSG_NO_PRINTER, (STRPTR)MSG_NO_PRINTER_STR},
    {MSG_PAGENR, (STRPTR)MSG_PAGENR_STR},
    {MSG_NAME_OUTPUT, (STRPTR)MSG_NAME_OUTPUT_STR},
    {MSG_DWZ_OUTPUT, (STRPTR)MSG_DWZ_OUTPUT_STR},
    {MSG_CHESSCLUB_OUTPUT, (STRPTR)MSG_CHESSCLUB_OUTPUT_STR},
    {MSG_STREET_OUTPUT, (STRPTR)MSG_STREET_OUTPUT_STR},
    {MSG_VILLAGE_OUTPUT, (STRPTR)MSG_VILLAGE_OUTPUT_STR},
    {MSG_BIRTHDAY_OUTPUT, (STRPTR)MSG_BIRTHDAY_OUTPUT_STR},
    {MSG_PHONE_OUTPUT, (STRPTR)MSG_PHONE_OUTPUT_STR},
    {MSG_PLAYER_LIST_TITLE, (STRPTR)MSG_PLAYER_LIST_TITLE_STR},
    {MSG_RESULT_OUTPUT, (STRPTR)MSG_RESULT_OUTPUT_STR},
    {MSG_WHITE_OUTPUT, (STRPTR)MSG_WHITE_OUTPUT_STR},
    {MSG_BLACK_OUTPUT, (STRPTR)MSG_BLACK_OUTPUT_STR},
    {MSG_ROUND_TITLE, (STRPTR)MSG_ROUND_TITLE_STR},
    {MSG_PLACE_OUTPUT, (STRPTR)MSG_PLACE_OUTPUT_STR},
    {MSG_POINTS_OUTPUT, (STRPTR)MSG_POINTS_OUTPUT_STR},
    {MSG_BUCHHOLZ_OUTPUT, (STRPTR)MSG_BUCHHOLZ_OUTPUT_STR},
    {MSG_EXT_BUCHHOLZ_OUTPUT, (STRPTR)MSG_EXT_BUCHHOLZ_OUTPUT_STR},
    {MSG_SONNEBORN_BERGER_OUTPUT, (STRPTR)MSG_SONNEBORN_BERGER_OUTPUT_STR},
    {MSG_TABLE_TITLE, (STRPTR)MSG_TABLE_TITLE_STR},
    {MSG_TABLE_TITLE2, (STRPTR)MSG_TABLE_TITLE2_STR},
    {MSG_RANKINGS_TITLE, (STRPTR)MSG_RANKINGS_TITLE_STR},
    {MSG_NUMBER, (STRPTR)MSG_NUMBER_STR},
    {MSG_RANKINGS_TITLE2, (STRPTR)MSG_RANKINGS_TITLE2_STR},
    {MSG_PROGRESS_TABLE_TITLE, (STRPTR)MSG_PROGRESS_TABLE_TITLE_STR},
    {MSG_GAME_OUTPUT, (STRPTR)MSG_GAME_OUTPUT_STR},
    {MSG_FREE_GAME_OUTPUT, (STRPTR)MSG_FREE_GAME_OUTPUT_STR},
    {MSG_GONE_OUTPUT, (STRPTR)MSG_GONE_OUTPUT_STR},
    {MSG_FREE_POINT_OUTPUT, (STRPTR)MSG_FREE_POINT_OUTPUT_STR},
    {MSG_FREE_GAME_OUTPUT2, (STRPTR)MSG_FREE_GAME_OUTPUT2_STR},
    {MSG_NO_FIGHT_OUTPUT, (STRPTR)MSG_NO_FIGHT_OUTPUT_STR},
    {MSG_ROUND_INPUT_TITLE, (STRPTR)MSG_ROUND_INPUT_TITLE_STR},
    {MSG_NEW_PLAYER_REQUEST, (STRPTR)MSG_NEW_PLAYER_REQUEST_STR},
    {MSG_MODIFY_PLAYER_REQUEST, (STRPTR)MSG_MODIFY_PLAYER_REQUEST_STR},
    {MSG_DELETE_PLAYER_REQUEST, (STRPTR)MSG_DELETE_PLAYER_REQUEST_STR},
    {MSG_DELETE_THIS_PLAYER_REQUEST, (STRPTR)MSG_DELETE_THIS_PLAYER_REQUEST_STR},
    {MSG_THIS_PLAYER_GONE_REQUEST, (STRPTR)MSG_THIS_PLAYER_GONE_REQUEST_STR},
    {MSG_DONT_CARE_REQUEST_TITLE, (STRPTR)MSG_DONT_CARE_REQUEST_TITLE_STR},
    {MSG_DONT_CARE_REQUEST, (STRPTR)MSG_DONT_CARE_REQUEST_STR},
    {MSG_OK, (STRPTR)MSG_OK_STR},
    {MSG_ERROR_REQUEST, (STRPTR)MSG_ERROR_REQUEST_STR},
    {MSG_MEMORY_ERROR, (STRPTR)MSG_MEMORY_ERROR_STR},
    {MSG_SWISS_PAIRING, (STRPTR)MSG_SWISS_PAIRING_STR},
    {MSG_RUNDENTURNIER, (STRPTR)MSG_RUNDENTURNIER_STR},
    {MSG_RUTSCHSYSTEM, (STRPTR)MSG_RUTSCHSYSTEM_STR},
    {MSG_TOURNAMENT_INPUT_TITLE, (STRPTR)MSG_TOURNAMENT_INPUT_TITLE_STR},
    {MSG_PLAYER_INPUT_TITLE, (STRPTR)MSG_PLAYER_INPUT_TITLE_STR},
    {MSG_WHITE_WINS_INPUT, (STRPTR)MSG_WHITE_WINS_INPUT_STR},
    {MSG_DRAW_INPUT, (STRPTR)MSG_DRAW_INPUT_STR},
    {MSG_BLACK_WINS_INPUT, (STRPTR)MSG_BLACK_WINS_INPUT_STR},
    {MSG_RESULT_MISSING_INPUT, (STRPTR)MSG_RESULT_MISSING_INPUT_STR},
    {MSG_AUSGETRAGEN_INPUT, (STRPTR)MSG_AUSGETRAGEN_INPUT_STR},
    {MSG_KAMPFLOS_INPUT, (STRPTR)MSG_KAMPFLOS_INPUT_STR},
    {MSG_TOURNAMENT_MENU, (STRPTR)MSG_TOURNAMENT_MENU_STR},
    {MSG_TOURNAMENT_NEW_ITEM, (STRPTR)MSG_TOURNAMENT_NEW_ITEM_STR},
    {MSG_TOURNAMENT_LOAD_ITEM, (STRPTR)MSG_TOURNAMENT_LOAD_ITEM_STR},
    {MSG_TOURNAMENT_SAVE_ITEM, (STRPTR)MSG_TOURNAMENT_SAVE_ITEM_STR},
    {MSG_TOURNAMENT_SAVEAS_ITEM, (STRPTR)MSG_TOURNAMENT_SAVEAS_ITEM_STR},
    {MSG_TOURNAMENT_ABOUT_ITEM, (STRPTR)MSG_TOURNAMENT_ABOUT_ITEM_STR},
    {MSG_TOURNAMENT_QUIT_ITEM, (STRPTR)MSG_TOURNAMENT_QUIT_ITEM_STR},
    {MSG_PLAYER_MENU, (STRPTR)MSG_PLAYER_MENU_STR},
    {MSG_PLAYER_ADD_ITEM, (STRPTR)MSG_PLAYER_ADD_ITEM_STR},
    {MSG_PLAYER_MODIFY_ITEM, (STRPTR)MSG_PLAYER_MODIFY_ITEM_STR},
    {MSG_PLAYER_DELETE_ITEM, (STRPTR)MSG_PLAYER_DELETE_ITEM_STR},
    {MSG_ROUND_MENU, (STRPTR)MSG_ROUND_MENU_STR},
    {MSG_ROUND_PAIRINGS_ITEM, (STRPTR)MSG_ROUND_PAIRINGS_ITEM_STR},
    {MSG_ROUND_PAIRINGS_SWISS_SUB, (STRPTR)MSG_ROUND_PAIRINGS_SWISS_SUB_STR},
    {MSG_ROUND_PAIRINGS_RROBIN_SUB, (STRPTR)MSG_ROUND_PAIRINGS_RROBIN_SUB_STR},
    {MSG_ROUND_PAIRINGS_SLIDE_SUB, (STRPTR)MSG_ROUND_PAIRINGS_SLIDE_SUB_STR},
    {MSG_ROUND_RESULTS_ITEM, (STRPTR)MSG_ROUND_RESULTS_ITEM_STR},
    {MSG_OUTPUT_MENU, (STRPTR)MSG_OUTPUT_MENU_STR},
    {MSG_OUTPUT_PLAYERS_ITEM, (STRPTR)MSG_OUTPUT_PLAYERS_ITEM_STR},
    {MSG_OUTPUT_PLAYERS_SHORT_SUB, (STRPTR)MSG_OUTPUT_PLAYERS_SHORT_SUB_STR},
    {MSG_OUTPUT_PLAYERS_LONG_SUB, (STRPTR)MSG_OUTPUT_PLAYERS_LONG_SUB_STR},
    {MSG_OUTPUT_RANKINGS_ITEM, (STRPTR)MSG_OUTPUT_RANKINGS_ITEM_STR},
    {MSG_OUTPUT_ROUND_ITEM, (STRPTR)MSG_OUTPUT_ROUND_ITEM_STR},
    {MSG_OUTPUT_TABLE_ITEM, (STRPTR)MSG_OUTPUT_TABLE_ITEM_STR},
    {MSG_OUTPUT_TABLE_ALL_SUB, (STRPTR)MSG_OUTPUT_TABLE_ALL_SUB_STR},
    {MSG_OUTPUT_TABLE_SENIORS_SUB, (STRPTR)MSG_OUTPUT_TABLE_SENIORS_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORS_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORS_SUB_STR},
    {MSG_OUTPUT_TABLE_WOMEN_SUB, (STRPTR)MSG_OUTPUT_TABLE_WOMEN_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORSA_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORSA_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORSB_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORSB_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORSC_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORSC_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORSD_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORSD_SUB_STR},
    {MSG_OUTPUT_TABLE_JUNIORSE_SUB, (STRPTR)MSG_OUTPUT_TABLE_JUNIORSE_SUB_STR},
    {MSG_OUTPUT_PROGRESSTABLE_ITEM, (STRPTR)MSG_OUTPUT_PROGRESSTABLE_ITEM_STR},
    {MSG_OUTPUT_DWZ_ITEM, (STRPTR)MSG_OUTPUT_DWZ_ITEM_STR},
    {MSG_OUTPUT_CROSSTABLE_ITEM, (STRPTR)MSG_OUTPUT_CROSSTABLE_ITEM_STR},
    {MSG_OUTPUT_PLAYERCARDS_ITEM, (STRPTR)MSG_OUTPUT_PLAYERCARDS_ITEM_STR},
    {MSG_PREFS_MENU, (STRPTR)MSG_PREFS_MENU_STR},
    {MSG_PREFS_TMODE_ITEM, (STRPTR)MSG_PREFS_TMODE_ITEM_STR},
    {MSG_PREFS_TMODE_SIMPLE_SUB, (STRPTR)MSG_PREFS_TMODE_SIMPLE_SUB_STR},
    {MSG_PREFS_TMODE_BUCHHOLZ_SUB, (STRPTR)MSG_PREFS_TMODE_BUCHHOLZ_SUB_STR},
    {MSG_PREFS_TMODE_EXTBCHHLZ_SUB, (STRPTR)MSG_PREFS_TMODE_EXTBCHHLZ_SUB_STR},
    {MSG_PREFS_TMODE_SONNEBORN_SUB, (STRPTR)MSG_PREFS_TMODE_SONNEBORN_SUB_STR},
    {MSG_PREFS_OUT_ITEM, (STRPTR)MSG_PREFS_OUT_ITEM_STR},
    {MSG_PREFS_OUT_SCREEN_SUB, (STRPTR)MSG_PREFS_OUT_SCREEN_SUB_STR},
    {MSG_PREFS_OUT_PRTDRAFT_SUB, (STRPTR)MSG_PREFS_OUT_PRTDRAFT_SUB_STR},
    {MSG_PREFS_OUT_PRTLQ_SUB, (STRPTR)MSG_PREFS_OUT_PRTLQ_SUB_STR},
    {MSG_PREFS_MAKEICONS_ITEM, (STRPTR)MSG_PREFS_MAKEICONS_ITEM_STR},
    {MSG_NUM_PLAYERS_OUTPUT, (STRPTR)MSG_NUM_PLAYERS_OUTPUT_STR},
    {MSG_NUM_ROUNDS_OUTPUT, (STRPTR)MSG_NUM_ROUNDS_OUTPUT_STR},
    {MSG_TOURNAMENT_NAME_OUTPUT, (STRPTR)MSG_TOURNAMENT_NAME_OUTPUT_STR},
    {MSG_TOURNAMENT_FILE_OUTPUT, (STRPTR)MSG_TOURNAMENT_FILE_OUTPUT_STR},
    {MSG_TOURNAMENT_MODE_OUTPUT, (STRPTR)MSG_TOURNAMENT_MODE_OUTPUT_STR},
    {MSG_CANCEL_INPUT, (STRPTR)MSG_CANCEL_INPUT_STR},
    {MSG_OK_INPUT, (STRPTR)MSG_OK_INPUT_STR},
    {MSG_TOURNAMENT_NAME_INPUT, (STRPTR)MSG_TOURNAMENT_NAME_INPUT_STR},
    {MSG_NAME_INPUT, (STRPTR)MSG_NAME_INPUT_STR},
    {MSG_STREET_INPUT, (STRPTR)MSG_STREET_INPUT_STR},
    {MSG_VILLAGE_INPUT, (STRPTR)MSG_VILLAGE_INPUT_STR},
    {MSG_CHESS_CLUB_INPUT, (STRPTR)MSG_CHESS_CLUB_INPUT_STR},
    {MSG_PHONE_INPUT, (STRPTR)MSG_PHONE_INPUT_STR},
    {MSG_BIRTHDAY_INPUT, (STRPTR)MSG_BIRTHDAY_INPUT_STR},
    {MSG_DWZ_INPUT, (STRPTR)MSG_DWZ_INPUT_STR},
    {MSG_ELO_INPUT, (STRPTR)MSG_ELO_INPUT_STR},
    {MSG_SENIORS_INPUT, (STRPTR)MSG_SENIORS_INPUT_STR},
    {MSG_JUNIORS_INPUT, (STRPTR)MSG_JUNIORS_INPUT_STR},
    {MSG_WOMEN_INPUT, (STRPTR)MSG_WOMEN_INPUT_STR},
    {MSG_JUNIORSA_INPUT, (STRPTR)MSG_JUNIORSA_INPUT_STR},
    {MSG_JUNIORSB_INPUT, (STRPTR)MSG_JUNIORSB_INPUT_STR},
    {MSG_JUNIORSC_INPUT, (STRPTR)MSG_JUNIORSC_INPUT_STR},
    {MSG_JUNIORSD_INPUT, (STRPTR)MSG_JUNIORSD_INPUT_STR},
    {MSG_JUNIORSE_INPUT, (STRPTR)MSG_JUNIORSE_INPUT_STR},
    {MSG_MISSING_PLAYER_NAME, (STRPTR)MSG_MISSING_PLAYER_NAME_STR},
    {MSG_BIRTHDAY_ERROR, (STRPTR)MSG_BIRTHDAY_ERROR_STR},
    {MSG_ABOUT_PERMISSION, (STRPTR)MSG_ABOUT_PERMISSION_STR},
    {MSG_ABOUT_THANKS1, (STRPTR)MSG_ABOUT_THANKS1_STR},
    {MSG_ABOUT_THANKS2, (STRPTR)MSG_ABOUT_THANKS2_STR},
    {MSG_NO_BIRTHDAY, (STRPTR)MSG_NO_BIRTHDAY_STR},
    {MSG_NO_BIRTHDAY_GADGETS, (STRPTR)MSG_NO_BIRTHDAY_GADGETS_STR},
    {MSG_DWZ_TITLE, (STRPTR)MSG_DWZ_TITLE_STR},
    {MSG_ABOUT_TITLE, (STRPTR)MSG_ABOUT_TITLE_STR},
    {MSG_ELO_OUTPUT, (STRPTR)MSG_ELO_OUTPUT_STR},
    {MSG_SENIOR_SHORT, (STRPTR)MSG_SENIOR_SHORT_STR},
    {MSG_JUNIOR_SHORT, (STRPTR)MSG_JUNIOR_SHORT_STR},
    {MSG_WOMAN_SHORT, (STRPTR)MSG_WOMAN_SHORT_STR},
    {MSG_JUNIORA_SHORT, (STRPTR)MSG_JUNIORA_SHORT_STR},
    {MSG_JUNIORB_SHORT, (STRPTR)MSG_JUNIORB_SHORT_STR},
    {MSG_JUNIORC_SHORT, (STRPTR)MSG_JUNIORC_SHORT_STR},
    {MSG_JUNIORD_SHORT, (STRPTR)MSG_JUNIORD_SHORT_STR},
    {MSG_JUNIORE_SHORT, (STRPTR)MSG_JUNIORE_SHORT_STR},
    {MSG_DATE_FORMAT, (STRPTR)MSG_DATE_FORMAT_STR},
    {KEY_PROJECT_LOAD, (STRPTR)KEY_PROJECT_LOAD_STR},
    {KEY_PROJECT_SAVE, (STRPTR)KEY_PROJECT_SAVE_STR},
    {KEY_PROJECT_SAVE_AS, (STRPTR)KEY_PROJECT_SAVE_AS_STR},
    {KEY_PROJECT_ABOUT, (STRPTR)KEY_PROJECT_ABOUT_STR},
    {KEY_PLAYERS_NEW, (STRPTR)KEY_PLAYERS_NEW_STR},
    {KEY_PLAYERS_MODIFY, (STRPTR)KEY_PLAYERS_MODIFY_STR},
    {MSG_PLAYER_SELECTION, (STRPTR)MSG_PLAYER_SELECTION_STR},
    {MSG_TEXFILE_SELECTION, (STRPTR)MSG_TEXFILE_SELECTION_STR},
};
static struct Catalog *ChaosCatalog = NULL;
static struct KCChaosArrayType *ChaosOwnCatalog = NULL;
static LONG ChaosOwnStrings;
static LONG ChaosOwnBytes;
void OpenChaosCatalog(struct Locale *loc, STRPTR language)
{ LONG tag, tagarg;
  extern struct Library *LocaleBase;
  extern struct Library *IFFParseBase;

  CloseChaosCatalog();  /*  Not needed if the programmer pairs Open-()
			    and CloseCatalog() right, but does no harm. */
  if (language == NULL)
  { tag = TAG_IGNORE;
  }
  else
  { tag = OC_Language;
    tagarg = (LONG) language;
  }
  if (LocaleBase != NULL  &&  ChaosCatalog == NULL)
  { ChaosCatalog = OpenCatalog(loc, (STRPTR) "Chaos.catalog",
			     OC_BuiltInLanguage, ChaosBuiltInLanguage,
			     tag, tagarg,
			     OC_Version, ChaosVersion,
			     TAG_DONE);
  }
  if (LocaleBase == NULL  &&  IFFParseBase != NULL  &&  language != NULL  &&
      Stricmp(language, ChaosBuiltInLanguage) != 0)
  { struct IFFHandle *iffhandle;
    char path[128]; /*	Enough to hold 4 path items (dos.library 3.0)  */

    if ((iffhandle = AllocIFF())  !=  NULL)
    { /*  Trying to open the catalog  */
      strcpy(path, "Catalogs");
      AddPart((STRPTR) path, language, sizeof(path));
      AddPart((STRPTR) path, (STRPTR) "Chaos.catalog", sizeof(path));
      if ((iffhandle->iff_Stream = Open((STRPTR) path, MODE_OLDFILE))
				 ==  NULL)
      { strcpy(path, "Locale:Catalogs");
	AddPart((STRPTR) path, language, sizeof(path));
	AddPart((STRPTR) path, (STRPTR) "Chaos.catalog", sizeof(path));
	iffhandle->iff_Stream = Open((STRPTR) path, MODE_OLDFILE);
      }

      if (iffhandle->iff_Stream)
      { InitIFFasDOS(iffhandle);
	if (!OpenIFF(iffhandle, IFFF_READ))
	{ if (!PropChunk(iffhandle, MAKE_ID('C','T','L','G'),
			 MAKE_ID('S','T','R','S')))
	  { struct StoredProperty *sp;
	    int error;

	    for (;;)
	    { if ((error = ParseIFF(iffhandle, IFFPARSE_STEP))
			 ==  IFFERR_EOC)
	      { continue;
	      }
	      if (error != 0)
	      { break;
	      }

	      if (sp = FindProp(iffhandle, MAKE_ID('C','T','L','G'),
				MAKE_ID('S','T','R','S')))
	      { LONG *ptr;
		LONG BytesToScan, StrLength;

		/*  First scan: Check the number of strings		*/
		/*  Note that this assumes that the strings are padded	*/
		/*  to a longword boundary!				*/
		ChaosOwnBytes = 0;
		ChaosOwnStrings = 0;
		BytesToScan = sp->sp_Size;
		ptr = sp->sp_Data;
		while (BytesToScan > 0)
		{ ++ChaosOwnStrings;
		  ++ptr;		      /*  Skip ID		*/
		  StrLength = *ptr+1;	      /*  NUL-Byte!		*/
		  ChaosOwnBytes += StrLength;
		  ptr += 1+(StrLength+3)/4;   /*  Skip Length and String*/
		  BytesToScan -= 8+((StrLength+3)/4)*4;
		}

		/*  Marginal check: BytesToScan has to be 0!		*/
		if (BytesToScan == 0)
		{ char *cptr;
		  LONG i;

		  if (ChaosOwnCatalog = (struct KCChaosArrayType *)
		      AllocMem(ChaosOwnStrings*sizeof(struct KCChaosArrayType)+ChaosOwnBytes,
			       MEMF_ANY))
		  { /*	Second scan: Copy the strings and their ID's    */
		    cptr = (char *) &ChaosOwnCatalog[ChaosOwnStrings];
		    BytesToScan = sp->sp_Size;
		    ptr = sp->sp_Data;
		    i = 0;
		    while (BytesToScan > 0)
		    { ChaosOwnCatalog[i].cca_ID = *(ptr++);
		      ChaosOwnCatalog[i].cca_Str = (STRPTR) cptr;
		      StrLength = *ptr+1;     /*  NUL-Byte!		*/
		      ptr++;
		      strncpy(cptr, (char *) ptr, StrLength);
					/*  Not more, not less bytes!	*/
		      cptr+=StrLength;
		      ptr += (StrLength+3)/4;
		      BytesToScan -= 8+((StrLength+3)/4)*4;
		      ++i;
		    }
		    break;
		  }
		}
	      }
	    }
	  }
	  CloseIFF(iffhandle);
	}
	Close(iffhandle->iff_Stream);
      }

      FreeIFF(iffhandle);
    }
  }
}

void CloseChaosCatalog(void)
{ if (LocaleBase != NULL)
  { CloseCatalog(ChaosCatalog);
  }
  ChaosCatalog = NULL;
  if (ChaosOwnCatalog != NULL)
  { FreeMem(ChaosOwnCatalog,
	    ChaosOwnStrings*sizeof(struct KCChaosArrayType)+ChaosOwnBytes);
    ChaosOwnCatalog = NULL;
  }
}

STRPTR GetChaosString(LONG strnum)
{ STRPTR defaultstr = NULL;
  LONG i;

  for (i = 0;  i < sizeof(KCChaosArray)/sizeof(struct KCChaosArrayType);  i++)
    { if (KCChaosArray[i].cca_ID == strnum)
      { defaultstr = KCChaosArray[i].cca_Str;
	break;
      }
    }
  if (ChaosCatalog == NULL)
  { if (ChaosOwnCatalog != NULL)
    { for (i = 0;  i < ChaosOwnStrings;  i++)
       { if (ChaosOwnCatalog[i].cca_ID == strnum)
	 { return(ChaosOwnCatalog[i].cca_Str);
	 }
       }
    }
    return(defaultstr);
  }
  return(GetCatalogStr(ChaosCatalog, strnum, defaultstr));
}
