#ifndef LIBRARIES_LOCALE_H
#define LIBRARIES_LOCALE_H
/*
**      $Id: locale.h,v 38.8 91/12/05 12:26:58 vertex Exp $
**
**      locale.library interface structures and definitions
**
**      (C) Copyright 1991 Commodore-Amiga, Inc.
**      All Rights Reserved
*/

/*****************************************************************************/


#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef EXEC_NODES_H
#include <exec/nodes.h>
#endif

#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif

#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif


/*****************************************************************************/


/* constants for GetLocaleStr() */
#define DAY_1           1       /* Sunday    */
#define DAY_2           2       /* Monday    */
#define DAY_3           3       /* Tuesday   */
#define DAY_4           4       /* Wednesday */
#define DAY_5           5       /* Thursday  */
#define DAY_6           6       /* Friday    */
#define DAY_7           7       /* Saturday  */

#define ABDAY_1         8       /* Sun */
#define ABDAY_2         9       /* Mon */
#define ABDAY_3         10      /* Tue */
#define ABDAY_4         11      /* Wed */
#define ABDAY_5         12      /* Thu */
#define ABDAY_6         13      /* Fri */
#define ABDAY_7         14      /* Sat */

#define MON_1           15      /* January   */
#define MON_2           16      /* February  */
#define MON_3           17      /* March     */
#define MON_4           18      /* April     */
#define MON_5           19      /* May       */
#define MON_6           20      /* June      */
#define MON_7           21      /* July      */
#define MON_8           22      /* August    */
#define MON_9           23      /* September */
#define MON_10          24      /* October   */
#define MON_11          25      /* November  */
#define MON_12          26      /* December  */

#define ABMON_1         27      /* Jan    */
#define ABMON_2         28      /* Feb    */
#define ABMON_3         29      /* Mar    */
#define ABMON_4         30      /* Apr    */
#define ABMON_5         31      /* May    */
#define ABMON_6         32      /* Jun    */
#define ABMON_7         33      /* Jul    */
#define ABMON_8         34      /* Aug    */
#define ABMON_9         35      /* Sep    */
#define ABMON_10        36      /* Oct    */
#define ABMON_11        37      /* Nov    */
#define ABMON_12        38      /* Dec    */

#define YESSTR          39      /* affirmative response for yes/no queries */
#define NOSTR           40      /* negative response for yes/no queries    */

#define AM_STR          41      /* AM                                      */
#define PM_STR          42      /* PM                                      */

#define SOFTHYPHEN      43      /* soft hyphenation                        */
#define HARDHYPHEN      44      /* hard hyphenation                        */

#define OPENQUOTE       45      /* start of quoted block                   */
#define CLOSEQUOTE      46      /* end of quoted block                     */

#define MAXSTRMSG       47      /* current number of defined strings       */


/*****************************************************************************/


/* OpenLibrary("locale.library") returns a pointer to this structure */
struct LocaleBase
{
    struct Library lb_LibNode;
    BOOL           lb_SysPatches;   /* TRUE if locale installed its patches */
};


/*****************************************************************************/


/* This structure must only be allocated by locale.library and is READ-ONLY! */
struct Locale
{
    STRPTR      loc_LocaleName;           /* locale's name               */
    STRPTR      loc_LanguageName;         /* language of this locale     */
    STRPTR      loc_PrefLanguages[10];    /* preferred languages         */
    ULONG       loc_Flags;                /* always 0 for now            */

    ULONG       loc_CodeSet;              /* for now, always 0           */
    ULONG       loc_CountryCode;          /* user's country code         */
    ULONG       loc_TelephoneCode;        /* country's telephone code    */
    LONG        loc_GMTOffset;            /* minutes from GMT            */
    UBYTE       loc_MeasuringSystem;      /* what measuring system?      */
    UBYTE	loc_CalendarType;         /* what calendar type?         */
    UBYTE       loc_Reserved0[2];

    STRPTR      loc_DateTimeFormat;       /* regular date & time format  */
    STRPTR      loc_DateFormat;           /* date format by itself       */
    STRPTR      loc_TimeFormat;           /* time format by itself       */

    STRPTR      loc_ShortDateTimeFormat;  /* short date & time format    */
    STRPTR      loc_ShortDateFormat;      /* short date format by itself */
    STRPTR      loc_ShortTimeFormat;      /* short time format by itself */

    /* for numeric values */
    STRPTR      loc_DecimalPoint;         /* character before the decimals   */
    STRPTR      loc_GroupSeparator;       /* separates groups of digits      */
    STRPTR      loc_FracGroupSeparator;   /* separates groups of digits      */
    UBYTE      *loc_Grouping;             /* size of each group              */
    UBYTE      *loc_FracGrouping;         /* size of each group              */

    /* for monetary values */
    STRPTR      loc_MonDecimalPoint;
    STRPTR      loc_MonGroupSeparator;
    STRPTR      loc_MonFracGroupSeparator;
    UBYTE      *loc_MonGrouping;
    UBYTE      *loc_MonFracGrouping;
    UBYTE       loc_MonFracDigits;        /* digits after the decimal point  */
    UBYTE       loc_MonIntFracDigits;     /* for international representation*/
    UBYTE       loc_Reserved1[2];

    /* for currency symbols */
    STRPTR      loc_MonCS;                /* currency symbol                 */
    STRPTR      loc_MonSmallCS;           /* symbol for small amounts        */
    STRPTR      loc_MonIntCS;             /* internationl (ISO 4217) code    */

    /* for positive monetary values */
    STRPTR      loc_MonPositiveSign;      /* indicate positive money value   */
    UBYTE       loc_MonPositiveSpaceSep;  /* determine if separated by space */
    UBYTE       loc_MonPositiveSignPos;   /* position of positive sign       */
    UBYTE       loc_MonPositiveCSPos;     /* position of currency symbol     */
    UBYTE       loc_Reserved2;

    /* for negative monetary values */
    STRPTR      loc_MonNegativeSign;      /* indicate negative money value   */
    UBYTE       loc_MonNegativeSpaceSep;  /* determine if separated by space */
    UBYTE       loc_MonNegativeSignPos;   /* position of negative sign       */
    UBYTE       loc_MonNegativeCSPos;     /* position of currency symbol     */
    UBYTE       loc_Reserved3;
};

/* constants for Locale.loc_MeasuringSystem */
#define MS_ISO          0       /* international metric system */
#define MS_AMERICAN     1       /* american system             */
#define MS_IMPERIAL     2       /* imperial system             */
#define MS_BRITISH      3       /* british system              */

/* constants for Locale.loc_CalendarType */
#define CT_7SUN 0   /* 7 days a week, Sunday is the first day    */
#define CT_7MON 1   /* 7 days a week, Monday is the first day    */
#define CT_7TUE 2   /* 7 days a week, Tuesday is the first day   */
#define CT_7WED 3   /* 7 days a week, Wednesday is the first day */
#define CT_7THU 4   /* 7 days a week, Thursday is the first day  */
#define CT_7FRI 5   /* 7 days a week, Friday is the first day    */
#define CT_7SAT 6   /* 7 days a week, Saturday is the first day  */

/* constants for Locale.loc_MonPositiveSpaceSep and Locale.loc_MonNegativeSpaceSep */
#define SS_NOSPACE 0  /* cur. symbol is NOT separated from value with a space */
#define SS_SPACE   1  /* cur. symbol IS separated from value with a space     */

/* constants for Locale.loc_MonPositiveSignPos and Locale.loc_MonNegativeSignPos */
#define SP_PARENS    0  /* () surround the quantity and currency_symbol   */
#define SP_PREC_ALL  1  /* sign string comes before amount and symbol     */
#define SP_SUCC_ALL  2  /* sign string comes after amount and symbol      */
#define SP_PREC_CURR 3  /* sign string comes right before currency symbol */
#define SP_SUCC_CURR 4  /* sign string comes right after currency symbol  */

/* constants for Locale.loc_MonPositiveCSPos and Locale.loc_MonNegativeCSPos */
#define CSP_PRECEDES 0  /* currency symbol comes before value */
#define CSP_SUCCEEDS 1  /* currency symbol comes after value  */

/* elements of the byte arrays pointed to by:
 *   Locale.loc_Grouping
 *   Locale.loc_FracGrouping
 *   Locale.loc_MonGrouping
 *   Locale.loc_MonFracGrouping
 * are interpreted as follows:
 *
 *    255     indicates that no further grouping is to be performed
 *    0       indicates that the previous element is to be repeatedly used
 *            for the remainder of the digits
 *    <other> the number of digits that comprises the current group
 */


/*****************************************************************************/


/* Tags for OpenCatalog() */
#define OC_TagBase         (TAG_USER + 0x90000)
#define OC_BuiltInLanguage OC_TagBase+1   /* language of built-in strings    */
#define OC_BuiltInCodeSet  OC_TagBase+2   /* code set of built-in strings    */
#define OC_Version         OC_TagBase+3   /* catalog version number required */
#define OC_Language        OC_TagBase+4   /* preferred language of catalog   */


/*****************************************************************************/


/* Comparison types for StrnCmp() */
#define SC_ASCII    0
#define SC_COLLATE1 1
#define SC_COLLATE2 2


/*****************************************************************************/


/* This structure must only be allocated by locale.library and is READ-ONLY! */
struct Catalog
{
    struct Node cat_Link;       /* for internal linkage    */
    UWORD       cat_Pad;        /* to longword align       */
    STRPTR      cat_Language;   /* language of the catalog */
    ULONG       cat_CodeSet;    /* currently always 0      */
    UWORD       cat_Version;    /* version of the catalog  */
    UWORD       cat_Revision;   /* revision of the catalog */
};


/*****************************************************************************/


#endif  /* LIBRARIES_LOCALE_H */
