AROS: added locale library unit

git-svn-id: trunk@34519 -
This commit is contained in:
marcus 2016-09-12 20:53:58 +00:00
parent bc6819aa91
commit 97a4c7b9f7
3 changed files with 264 additions and 0 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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;

View File

@ -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.