Jelajahi Sumber

AROS: added locale library unit

git-svn-id: trunk@34519 -
marcus 9 tahun lalu
induk
melakukan
97a4c7b9f7
3 mengubah file dengan 264 tambahan dan 0 penghapusan
  1. 1 0
      .gitattributes
  2. 1 0
      packages/arosunits/fpmake.pp
  3. 262 0
      packages/arosunits/src/locale.pas

+ 1 - 0
.gitattributes

@@ -1185,6 +1185,7 @@ packages/arosunits/src/inputevent.pas svneol=native#text/plain
 packages/arosunits/src/intuition.pas svneol=native#text/plain
 packages/arosunits/src/keymap.pas svneol=native#text/plain
 packages/arosunits/src/layers.pas svneol=native#text/plain
+packages/arosunits/src/locale.pas svneol=native#text/pascal
 packages/arosunits/src/longarray.pas svneol=native#text/plain
 packages/arosunits/src/mui.pas svneol=native#text/plain
 packages/arosunits/src/tagsarray.pas svneol=native#text/plain

+ 1 - 0
packages/arosunits/fpmake.pp

@@ -52,6 +52,7 @@ begin
     T:=P.Targets.AddUnit('asl.pas');
     T:=P.Targets.AddUnit('mui.pas');
     T:=P.Targets.AddUnit('cybergraphics.pas');
+    T:=P.Targets.AddUnit('locale.pas');
 
 {$ifndef ALLPACKAGES}
     Run;

+ 262 - 0
packages/arosunits/src/locale.pas

@@ -0,0 +1,262 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2016 by Free Pascal development team
+
+    locale.library functions
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+{$PACKRECORDS 2}
+
+unit locale;
+
+interface
+
+uses
+  exec, amigados, utility;
+
+type
+  PLocaleBase = ^TLocaleBase;
+  TLocaleBase = record
+    lb_LibNode: TLibrary;
+    lb_SysPatches: WordBool;
+  end;
+
+{ This structure must only be allocated by locale.library and is READ-ONLY! }
+  PLocale = ^TLocale;
+  TLocale = record
+    // Basics
+    loc_LocaleName: STRPTR;                   // Name of locale
+    loc_LanguageName: STRPTR;                 // Language of locale
+    loc_PrefLanguages: array[0..9] of STRPTR; // Preferred languages as array
+    loc_Flags: LongWord;                      // Locale Flags (LOCF_*)
+    loc_CodeSet: LongWord;
+    // Country
+    loc_CountryCode: LongWord;         // country code
+    loc_TelephoneCode: LongWord;       // telephone code of country
+    loc_GMTOffset: LongInt;            // distance to GMT in minutes
+    loc_MeasuringSystem: Byte;         // Used measuring system (MS_*)
+    loc_CalendarType: Byte;            // Define start of the Week (CT_*)
+    loc_Reserved0: array[0..1] of Byte;
+    // DateTime
+    loc_DateTimeFormat,                     // Long date, time format
+    loc_DateFormat,                         // Long date format
+    loc_TimeFormat,                         // Long time format
+    loc_ShortDateTimeFormat,                // Short date, time format
+    loc_ShortDateFormat,                    // Short date format
+    loc_ShortTimeFormat,                    // Short time format
+    // Numerics
+    loc_DecimalPoint: STRPTR;               // Decimalseparator
+    loc_GroupSeparator: STRPTR;             // Thousandseparator
+    loc_FracGroupSeparator: STRPTR;         // Additional separator
+    loc_Grouping: PByte;                    // Size of loc_FracGroupSeparator group
+    loc_FracGrouping: PByte;                // Size of loc_FracGroupSeparator group
+    // Currency Format
+    loc_MonDecimalPoint: STRPTR;
+    loc_MonGroupSeparator: STRPTR;
+    loc_MonFracGroupSeparator: STRPTR;
+    loc_MonGrouping: PByte;
+    loc_MonFracGrouping: PByte;
+    loc_MonFracDigits: Byte;       // Numbers of places after loc_MonDecimalPoint
+    loc_MonIntFracDigits: Byte;
+    loc_Reserved1: array[0..1] of Byte;
+    // Currency symbol
+    loc_MonCS: STRPTR;             // Currency symbol (e.g. $)
+    loc_MonSmallCS: STRPTR;        // Symbol for small amounts (eg. cent)
+    loc_MonIntCS: STRPTR;          // Internationl (ISO 4217) code (e.g. EUR/USD/GBP)
+
+    loc_MonPositiveSign: STRPTR;   // for positive money value
+    loc_MonPositiveSpaceSep: Byte; // Separated by space (SS_*)
+    loc_MonPositiveSignPos: Byte;  // Position of positive sign (SP_*)
+    loc_MonPositiveCSPos: Byte;    // Position of currency symbol (CSP_*)
+    loc_Reserved2: Byte;
+
+    loc_MonNegativeSign: STRPTR;   // for negative money values
+    loc_MonNegativeSpaceSep: Byte; // Separated by space (SS_*)
+    loc_MonNegativeSignPos: Byte;  // Position of negative sign (SP_*)
+    loc_MonNegativeCSPos: Byte;    // Position of currency symbol (CSP_*)
+    loc_Reserved3: Byte;
+ end;
+
+
+const
+  // Flags for loc_Flags
+  LOCF_GMT_CLOCK = 1 shl 16; // Hardware clock stores GMT, AROS specific
+
+  // Values for loc_MeasuringSystem
+  MS_ISO      = 0;
+  MS_AMERICAN = 1;
+  MS_IMPERIAL = 2;
+  MS_BRITISH  = 3;
+
+  // Values for loc_CalendarType
+  CT_7SUN = 0; // First day is Sunday
+  CT_7MON = 1; // First day is Monday
+  CT_7TUE = 2; // First day is Tuesday
+  CT_7WED = 3; // First day is Wednesday
+  CT_7THU = 4; // First day is Thursday
+  CT_7FRI = 5; // First day is Friday
+  CT_7SAT = 6; // First day is Saturday
+
+  // Values for loc_MonPositiveSpaceSep and loc_MonNegativeSpaceSep
+  SS_NOSPACE = 0; // No space between currency symbol and value
+  SS_SPACE   = 1; // Set a space between currency symbol and value
+
+  // Values for loc_MonPositiveSignPos and loc_MonNegativeSignPos
+  SP_PARENS    = 0; // () surround the quantity and currency_symbol
+  SP_PREC_ALL  = 1; // sign before value and symbol
+  SP_SUCC_ALL  = 2; // sign after value and symbol
+  SP_PREC_CURR = 3; // sign right before currency symbol
+  SP_SUCC_CURR = 4; // sign right after currency symbol
+
+  // Values for loc_MonPositiveCSPos and loc_MonNegativeCSPos
+  CSP_PRECEDES = 0; // currency symbol before value
+  CSP_SUCCEEDS = 1; // currency symbol after value
+
+  // Tags for OpenCatalog()
+  OC_TagBase         = TAG_USER + $90000;
+  OC_BuiltInLanguage = OC_TagBase + 1; // language of built-in strings
+  OC_BuiltInCodeSet  = OC_TagBase + 2; // code set of built-in strings
+  OC_Version         = OC_TagBase + 3; // catalog version number required
+  OC_Language        = OC_TagBase + 4; // preferred language of catalog
+
+  // Comparison types for StrnCmp()
+  SC_ASCII    = 0;
+  SC_COLLATE1 = 1;
+  SC_COLLATE2 = 2;
+
+// Internal String-Numbers GetLocaleStr()
+  // Days of Week
+  DAY_1   = 1; // Sunday
+  DAY_2   = 2; // Monday
+  DAY_3   = 3; // Tuesday
+  DAY_4   = 4; // Wednesday
+  DAY_5   = 5; // Thursday
+  DAY_6   = 6; // Friday
+  DAY_7   = 7; // Saturday
+  // Abbreviated Days of Week
+  ABDAY_1 = 8;  // Sun
+  ABDAY_2 = 9;  // Mon
+  ABDAY_3 = 10; // Tue
+  ABDAY_4 = 11; // Wed
+  ABDAY_5 = 12; // Thu
+  ABDAY_6 = 13; // Fri
+  ABDAY_7 = 14; // Sat
+  // Months
+  MON_1    = 15; // January
+  MON_2    = 16; // February
+  MON_3    = 17; // March
+  MON_4    = 18; // April
+  MON_5    = 19; // May
+  MON_6    = 20; // June
+  MON_7    = 21; // July
+  MON_8    = 22; // August
+  MON_9    = 23; // September
+  MON_10   = 24; // October
+  MON_11   = 25; // November
+  MON_12   = 26; // December
+  // Abbreviated Months
+  ABMON_1  = 27; // Jan
+  ABMON_2  = 28; // Feb
+  ABMON_3  = 29; // Mar
+  ABMON_4  = 30; // Apr
+  ABMON_5  = 31; // May
+  ABMON_6  = 32; // Jun
+  ABMON_7  = 33; // Jul
+  ABMON_8  = 34; // Aug
+  ABMON_9  = 35; // Sep
+  ABMON_10 = 36; // Oct
+  ABMON_11 = 37; // Nov
+  ABMON_12 = 38; // Dec
+  // Question
+  YESSTR = 39; // affirmative response for yes/no queries
+  NOSTR  = 40; // negative response for yes/no queries
+  // 12 hour clock
+  AM_STR = 41;
+  PM_STR = 42;
+  // Hyphen
+  SOFTHYPHEN = 43;
+  HARDHYPHEN = 44;
+  // Quotes
+  OPENQUOTE  = 45; // Open quote
+  CLOSEQUOTE = 46; // Close quote
+  // relative day names
+  YESTERDAYSTR = 47; // Yesterday
+  TODAYSTR     = 48; // Today
+  TOMORROWSTR  = 49; // Tomorrow
+  FUTURESTR    = 50; // Future
+
+  LANG_NAME = 51; // V50
+  MAXSTRMSG = 52; // current number of defined strings
+
+type
+// This structure must only be allocated by locale.library and is READ-ONLY!
+  PCatalog = ^TCatalog;
+  TCatalog = record
+    cat_Link: TNode;       // for internal linkage
+    cat_Pad: Word;         // to longword align
+    cat_Language: STRPTR;  // language of the catalog
+    cat_CodeSet: LongWord; // currently always 0
+    cat_Version: Word;     // version of the catalog
+    cat_Revision: Word;    // revision of the catalog
+ end;
+
+var
+  LocaleBase: PLocaleBase = nil;
+
+const
+  LOCALENAME: PChar = 'locale.library';
+
+procedure CloseCatalog(Catalog: PCatalog); syscall LocaleBase 6;
+procedure CloseLocale(Locale: PLocale); syscall LocaleBase 7;
+function ConvToLower(Locale: PLocale; Character: LongWord): LongWord; syscall LocaleBase 8;
+function ConvToUpper(Locale: PLocale; Character: LongWord): LongWord; syscall LocaleBase 9;
+procedure FormatDate(Locale: PLocale; FormatString: STRPTR; Date: PDateStamp; Hook: PHook); syscall LocaleBase 10;
+function FormatString(Locale: PLocale; FmtTemplate: STRPTR; DataStream: APTR; PutCharFunc: PHook): APTR; syscall LocaleBase 11;
+function GetCatalogStr(Catalog: PCatalog; StringNum: LongWord; DefaultString: STRPTR): STRPTR; syscall LocaleBase 12;
+function GetLocaleStr(Locale: PLocale; StringNum: LongWord): STRPTR; syscall LocaleBase 13;
+function IsAlNum(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 14;
+function IsAlpha(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 15;
+function IsCntrl(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 16;
+function IsDigit(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 17;
+function IsGraph(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 18;
+function IsLower(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 19;
+function IsPrint(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 20;
+function IsPunct(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 21;
+function IsSpace(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 22;
+function IsUpper(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 23;
+function IsXDigit(Locale: PLocale; Character: LongWord): LongBool; syscall LocaleBase 24;
+function OpenCatalogA(Locale: PLocale; Name: STRPTR; Tags: PTagItem): PCatalog; syscall LocaleBase 25;
+function OpenLocale(Name: STRPTR): PLocale; syscall LocaleBase 26;
+function ParseDate(Locale: PLocale; Date: PDateStamp; FmtTemplate: STRPTR; GetCharFunc: PHook): LongBool; syscall LocaleBase 27;
+function LocalePrefsUpdate(Locale: PLocale): PLocale; syscall LocaleBase 28;
+function StrConvert(Locale: PLocale; String1: STRPTR; Buffer: APTR; BufferSize: LongWord; Typ: LongWord): LongWord; syscall LocaleBase 29;
+function StrnCmp(Locale: PLocale; String1: STRPTR; String2: STRPTR; Length: LongInt; Typ: LongWord): LongInt; syscall LocaleBase 30;
+
+function OpenCatalog(Locale: PLocale; Name: STRPTR; const Tags: array of PtrUInt): PCatalog;
+
+implementation
+
+function OpenCatalog(Locale: PLocale; Name: STRPTR; const Tags: array of PtrUInt): PCatalog;
+begin
+  OpenCatalog := OpenCatalogA(Locale, Name, @Tags);
+end;
+
+const
+  LIBVERSION = 0;
+
+initialization
+  LocaleBase := PLocaleBase(OpenLibrary(LOCALENAME, LIBVERSION));
+finalization
+  if Assigned(LocaleBase) then
+    CloseLibrary(PLibrary(LocaleBase));
+end.
+
+
+