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