1 {
2 This file is part of the Free Pascal run time library.
3
4 A file in Amiga system run time library.
5 Copyright (c) 1998-2003 by Nils Sjoholm
6 member of the Amiga RTL development team.
7
8 See the file COPYING.FPC, included in this distribution,
9 for details about the copyright.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 **********************************************************************}
16
17 {
18 History:
19
20 Added functions and procedures with array of const.
21 For use with fpc 1.0.7. They are in systemvartags.
22 11 Nov 2002.
23
24 Added the defines use_amiga_smartlink and
25 use_auto_openlib. Implemented autoopening
26 of the library.
27 14 Jan 2003.
28
29 Changed the start code for unit.
30 01 Feb 2003.
31
32 Changed integer > smallint.
33 09 Feb 2003.
34
35 nils.sjoholm@mailbox.swipnet.se
36 }
37 {$PACKRECORDS 2}
38
39 UNIT locale;
40
41 INTERFACE
42 USES exec, amigados, utility;
43
44 const
45 { constants for GetLocaleStr() }
46 DAY_1 = 1; { Sunday }
47 DAY_2 = 2; { Monday }
48 DAY_3 = 3; { Tuesday }
49 DAY_4 = 4; { Wednesday }
50 DAY_5 = 5; { Thursday }
51 DAY_6 = 6; { Friday }
52 DAY_7 = 7; { Saturday }
53
54 ABDAY_1 = 8 ; { Sun }
55 ABDAY_2 = 9 ; { Mon }
56 ABDAY_3 = 10; { Tue }
57 ABDAY_4 = 11; { Wed }
58 ABDAY_5 = 12; { Thu }
59 ABDAY_6 = 13; { Fri }
60 ABDAY_7 = 14; { Sat }
61
62 MON_1 = 15; { January }
63 MON_2 = 16; { February }
64 MON_3 = 17; { March }
65 MON_4 = 18; { April }
66 MON_5 = 19; { May }
67 MON_6 = 20; { June }
68 MON_7 = 21; { July }
69 MON_8 = 22; { August }
70 MON_9 = 23; { September }
71 MON_10 = 24; { October }
72 MON_11 = 25; { November }
73 MON_12 = 26; { December }
74
75 ABMON_1 = 27; { Jan }
76 ABMON_2 = 28; { Feb }
77 ABMON_3 = 29; { Mar }
78 ABMON_4 = 30; { Apr }
79 ABMON_5 = 31; { May }
80 ABMON_6 = 32; { Jun }
81 ABMON_7 = 33; { Jul }
82 ABMON_8 = 34; { Aug }
83 ABMON_9 = 35; { Sep }
84 ABMON_10 = 36; { Oct }
85 ABMON_11 = 37; { Nov }
86 ABMON_12 = 38; { Dec }
87
88 YESSTR = 39; { affirmative response for yes/no queries }
89 NOSTR = 40; { negative response for yes/no queries }
90
91 AM_STR = 41; { AM }
92 PM_STR = 42; { PM }
93
94 SOFTHYPHEN = 43; { soft hyphenation }
95 HARDHYPHEN = 44; { hard hyphenation }
96
97 OPENQUOTE = 45; { start of quoted block }
98 CLOSEQUOTE = 46; { end of quoted block }
99
100 YESTERDAYSTR = 47; { Yesterday }
101 TODAYSTR = 48; { Today }
102 TOMORROWSTR = 49; { Tomorrow }
103 FUTURESTR = 50; { Future }
104
105 MAXSTRMSG = 51; { current number of defined strings }
106
107
108 {***************************************************************************}
109
110 Type
111 { OpenLibrary("locale.library",0) returns a pointer to this structure }
112 pLocaleBase = ^tLocaleBase;
113 tLocaleBase = record
114 lb_LibNode : tLibrary;
115 lb_SysPatches : WordBool; { TRUE if locale installed its patches }
116 end;
117
118 {***************************************************************************}
119
120 Type
121 { This structure must only be allocated by locale.library and is READ-ONLY! }
122 pLocale = ^tLocale;
123 tLocale = record
124 loc_LocaleName, { locale's name }
125 loc_LanguageName : STRPTR; { language of this locale }
126 loc_PrefLanguages : Array[0..9] of STRPTR; { preferred languages }
127 loc_Flags : ULONG; { always 0 for now }
128
129 loc_CodeSet, { always 0 for now }
130 loc_CountryCode, { user's country code }
131 loc_TelephoneCode, { country's telephone code }
132 loc_GMTOffset : ULONG; { minutes from GMT }
133 loc_MeasuringSystem, { what measuring system? }
134 loc_CalendarType : Byte; { what calendar type? }
135 loc_Reserved0 : Array[0..1] of Byte;
136
137 loc_DateTimeFormat, { regular date & time format }
138 loc_DateFormat, { date format by itself }
139 loc_TimeFormat, { time format by itself }
140
141 loc_ShortDateTimeFormat, { short date & time format }
142 loc_ShortDateFormat, { short date format by itself }
143 loc_ShortTimeFormat, { short time format by itself }
144
145 { for numeric values }
146 loc_DecimalPoint, { character before the decimals }
147 loc_GroupSeparator, { separates groups of digits }
148 loc_FracGroupSeparator : STRPTR; { separates groups of digits }
149 loc_Grouping, { size of each group }
150 loc_FracGrouping : Pointer; { size of each group }
151
152 { for monetary values }
153 loc_MonDecimalPoint,
154 loc_MonGroupSeparator,
155 loc_MonFracGroupSeparator : STRPTR;
156 loc_MonGrouping,
157 loc_MonFracGrouping : Pointer;
158 loc_MonFracDigits, { digits after the decimal point }
159 loc_MonIntFracDigits : Byte; { for international representation }
160 loc_Reserved1 : Array[0..1] of Byte;
161
162 { for currency symbols }
163 loc_MonCS, { currency symbol }
164 loc_MonSmallCS, { symbol for small amounts }
165 loc_MonIntCS : STRPTR; { internationl (ISO 4217) code }
166
167 { for positive monetary values }
168 loc_MonPositiveSign : STRPTR; { indicate positive money value }
169 loc_MonPositiveSpaceSep, { determine if separated by space }
170 loc_MonPositiveSignPos, { position of positive sign }
171 loc_MonPositiveCSPos, { position of currency symbol }
172 loc_Reserved2 : Byte;
173
174 { for negative monetary values }
175 loc_MonNegativeSign : STRPTR; { indicate negative money value }
176 loc_MonNegativeSpaceSep, { determine if separated by space }
177 loc_MonNegativeSignPos, { position of negative sign }
178 loc_MonNegativeCSPos, { position of currency symbol }
179 loc_Reserved3 : Byte;
180 end;
181
182 const
183 { constants for Locale.loc_MeasuringSystem }
184 MS_ISO = 0; { international metric system }
185 MS_AMERICAN = 1; { american system }
186 MS_IMPERIAL = 2; { imperial system }
187 MS_BRITISH = 3; { british system }
188
189 { constants for Locale.loc_CalendarType }
190 CT_7SUN = 0; { 7 days a week, Sunday is the first day }
191 CT_7MON = 1; { 7 days a week, Monday is the first day }
192 CT_7TUE = 2; { 7 days a week, Tuesday is the first day }
193 CT_7WED = 3; { 7 days a week, Wednesday is the first day }
194 CT_7THU = 4; { 7 days a week, Thursday is the first day }
195 CT_7FRI = 5; { 7 days a week, Friday is the first day }
196 CT_7SAT = 6; { 7 days a week, Saturday is the first day }
197
198 { constants for Locale.loc_MonPositiveSpaceSep and Locale.loc_MonNegativeSpaceSep }
199 SS_NOSPACE = 0; { cur. symbol is NOT separated from value with a space }
200 SS_SPACE = 1; { cur. symbol IS separated from value with a space }
201
202 { constants for Locale.loc_MonPositiveSignPos and Locale.loc_MonNegativeSignPos }
203 SP_PARENS = 0; { () surround the quantity and currency_symbol }
204 SP_PREC_ALL = 1; { sign string comes before amount and symbol }
205 SP_SUCC_ALL = 2; { sign string comes after amount and symbol }
206 SP_PREC_CURR = 3; { sign string comes right before currency symbol }
207 SP_SUCC_CURR = 4; { sign string comes right after currency symbol }
208
209 { constants for Locale.loc_MonPositiveCSPos and Locale.loc_MonNegativeCSPos }
210 CSP_PRECEDES = 0; { currency symbol comes before value }
211 CSP_SUCCEEDS = 1; { currency symbol comes after value }
212
213 { elements of the byte arrays pointed to by:
214 * Locale.loc_Grouping
215 * Locale.loc_FracGrouping
216 * Locale.loc_MonGrouping
217 * Locale.loc_MonFracGrouping
218 * are interpreted as follows:
219 *
220 * 255 indicates that no further grouping is to be performed
221 * 0 indicates that the previous element is to be repeatedly used
222 * for the remainder of the digits
223 * <other> the number of digits that comprises the current group
224 }
225
226
227 {***************************************************************************}
228
229
230 { Tags for OpenCatalog() }
231 OC_TagBase = (TAG_USER + $90000);
232 OC_BuiltInLanguage = OC_TagBase+1; { language of built-in strings }
233 OC_BuiltInCodeSet = OC_TagBase+2; { code set of built-in strings }
234 OC_Version = OC_TagBase+3; { catalog version number required }
235 OC_Language = OC_TagBase+4; { preferred language of catalog }
236
237
238 {***************************************************************************}
239
240
241 { Comparison types for StrnCmp() }
242 SC_ASCII = 0;
243 SC_COLLATE1 = 1;
244 SC_COLLATE2 = 2;
245
246
247 {***************************************************************************}
248
249 Type
250 { This structure must only be allocated by locale.library and is READ-ONLY! }
251 pCatalog = ^tCatalog;
252 tCatalog = record
253 cat_Link : tNode; { for internal linkage }
254 cat_Pad : WORD; { to longword align }
255 cat_Language: STRPTR; { language of the catalog }
256 cat_CodeSet : ULONG; { currently always 0 }
257 cat_Version : WORD; { version of the catalog }
258 cat_Revision: WORD; { revision of the catalog }
259 end;
260
261 {***************************************************************************}
262
263 { --- functions in V38 or higher (Release 2.1) --- }
264
265 VAR LocaleBase : pLocaleBase = nil;
266
267 const
268 LOCALENAME : PChar = 'locale.library';
269
270 PROCEDURE CloseCatalog(catalog : pCatalog location 'a0'); syscall LocaleBase 036;
271 PROCEDURE CloseLocale(locale : pLocale location 'a0'); syscall LocaleBase 042;
ConvToLowernull272 FUNCTION ConvToLower(locale : pLocale location 'a0'; character : ULONG location 'd0') : ULONG; syscall LocaleBase 048;
ConvToUppernull273 FUNCTION ConvToUpper(locale : pLocale location 'a0'; character : ULONG location 'd0') : ULONG; syscall LocaleBase 054;
274 PROCEDURE FormatDate(locale : pLocale location 'a0'; fmtTemplate : pCHAR location 'a1'; date : pDateStamp location 'a2'; putCharFunc : pHook location 'a3'); syscall LocaleBase 060;
FormatStringnull275 FUNCTION FormatString(locale : pLocale location 'a0'; fmtTemplate : pCHAR location 'a1'; dataStream : POINTER location 'a2'; putCharFunc : pHook location 'a3') : POINTER; syscall LocaleBase 066;
GetCatalogStrnull276 FUNCTION GetCatalogStr(catalog : pCatalog location 'a0'; stringNum : LONGINT location 'd0'; defaultString : pCHAR location 'a1') : pCHAR; syscall LocaleBase 072;
GetLocaleStrnull277 FUNCTION GetLocaleStr(locale : pLocale location 'a0'; stringNum : ULONG location 'd0') : pCHAR; syscall LocaleBase 078;
IsAlNumnull278 FUNCTION IsAlNum(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 084;
IsAlphanull279 FUNCTION IsAlpha(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 090;
IsCntrlnull280 FUNCTION IsCntrl(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 096;
IsDigitnull281 FUNCTION IsDigit(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 102;
IsGraphnull282 FUNCTION IsGraph(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 108;
IsLowernull283 FUNCTION IsLower(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 114;
IsPrintnull284 FUNCTION IsPrint(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 120;
IsPunctnull285 FUNCTION IsPunct(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 126;
IsSpacenull286 FUNCTION IsSpace(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 132;
IsUppernull287 FUNCTION IsUpper(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 138;
IsXDigitnull288 FUNCTION IsXDigit(locale : pLocale location 'a0'; character : ULONG location 'd0') : LongBool; syscall LocaleBase 144;
OpenCatalogAnull289 FUNCTION OpenCatalogA(locale : pLocale location 'a0'; name : pCHAR location 'a1'; tags : pTagItem location 'a2') : pCatalog; syscall LocaleBase 150;
OpenLocalenull290 FUNCTION OpenLocale(name : pCHAR location 'a0') : pLocale; syscall LocaleBase 156;
ParseDatenull291 FUNCTION ParseDate(locale : pLocale location 'a0'; date : pDateStamp location 'a1'; fmtTemplate : pCHAR location 'a2'; getCharFunc : pHook location 'a3') : LongBool; syscall LocaleBase 162;
StrConvertnull292 FUNCTION StrConvert(locale : pLocale location 'a0'; string1 : pCHAR location 'a1'; buffer : POINTER location 'a2'; bufferSize : ULONG location 'd0'; typ : ULONG location 'd1') : ULONG; syscall LocaleBase 174;
StrnCmpnull293 FUNCTION StrnCmp(locale : pLocale location 'a0'; string1 : pCHAR location 'a1'; string2 : pCHAR location 'a2'; length : LONGINT location 'd0'; typ : ULONG location 'd1') : LONGINT; syscall LocaleBase 180;
294
OpenCatalognull295 function OpenCatalog(locale : pLocale; name : pCHAR; Const argv : array of PtrUInt) : pCatalog;
296
297 IMPLEMENTATION
298
OpenCatalognull299 function OpenCatalog(locale : pLocale; name : pCHAR; Const argv : array of PtrUInt) : pCatalog;
300 begin
301 OpenCatalog := OpenCatalogA(locale,name,@argv);
302 end;
303
304 const
305 { Change VERSION and LIBVERSION to proper values }
306 VERSION : string[2] = '0';
307 LIBVERSION : longword = 0;
308
309 initialization
310 LocaleBase := pLocaleBase(OpenLibrary(LOCALENAME,LIBVERSION));
311 finalization
312 if Assigned(LocaleBase) then
313 CloseLibrary(pLibrary(LocaleBase));
314 END. (* UNIT LOCALE *)
315
316
317
318