home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D3.DMS / in.adf / Interfaces / Locale.mod < prev    next >
Encoding:
Text File  |  1993-05-23  |  13.3 KB  |  292 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Interface Module:                    Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1992 by Fridtjof Siebert                                            *)
  6. (*   written by Kai Bolay, revised by hartmut Goebel)                      *)
  7. (*                                                                         *)
  8. (*-------------------------------------------------------------------------*)
  9.  
  10. MODULE Locale;
  11.  
  12. IMPORT e * := Exec,
  13.        d * := Dos,
  14.        u * := Utility;
  15.  
  16. CONST
  17.   localeName * = "locale.library";
  18.  
  19. (* constants for GetLocaleStr() *)
  20.   day1    * = 1;      (* Sunday    *)
  21.   day2    * = 2;      (* Monday    *)
  22.   day3    * = 3;      (* Tuesday   *)
  23.   day4    * = 4;      (* Wednesday *)
  24.   day5    * = 5;      (* Thursday  *)
  25.   day6    * = 6;      (* Friday    *)
  26.   day7    * = 7;      (* Saturday  *)
  27.  
  28.   abDay1  * = 8;      (* Sun *)
  29.   abDay2  * = 9;      (* Mon *)
  30.   abDay3  * = 10;     (* Tue *)
  31.   abDay4  * = 11;     (* Wed *)
  32.   abDay5  * = 12;     (* Thu *)
  33.   abDay6  * = 13;     (* Fri *)
  34.   abDay7  * = 14;     (* Sat *)
  35.  
  36.   mon1    * = 15;     (* January   *)
  37.   mon2    * = 16;     (* February  *)
  38.   mon3    * = 17;     (* March     *)
  39.   mon4    * = 18;     (* April     *)
  40.   mon5    * = 19;     (* May       *)
  41.   mon6    * = 20;     (* June      *)
  42.   mon7    * = 21;     (* July      *)
  43.   mon8    * = 22;     (* August    *)
  44.   mon9    * = 23;     (* September *)
  45.   mon10   * = 24;     (* October   *)
  46.   mon11   * = 25;     (* November  *)
  47.   mon12   * = 26;     (* December  *)
  48.  
  49.   abMon1  * = 27;     (* Jan    *)
  50.   abMon2  * = 28;     (* Feb    *)
  51.   abMon3  * = 29;     (* Mar    *)
  52.   abMon4  * = 30;     (* Apr    *)
  53.   abMon5  * = 31;     (* May    *)
  54.   abMon6  * = 32;     (* Jun    *)
  55.   abMon7  * = 33;     (* Jul    *)
  56.   abMon8  * = 34;     (* Aug    *)
  57.   abMon9  * = 35;     (* Sep    *)
  58.   abMon10 * = 36;     (* Oct    *)
  59.   abMon11 * = 37;     (* Nov    *)
  60.   abMon12 * = 38;     (* Dec    *)
  61.  
  62.   yesStr  * = 39;     (* affirmative response for yes/no queries *)
  63.   noStr   * = 40;     (* negative response for yes/no queries    *)
  64.  
  65.   amStr   * =  41;    (* AM                                      *)
  66.   pmStr   * =  42;    (* PM                                      *)
  67.  
  68.   softHyphen * = 43;  (* soft hyphenation                        *)
  69.   hardHyphen * = 44;  (* hard hyphenation                        *)
  70.  
  71.   openQuote  * = 45;  (* start of quoted block                   *)
  72.   closeQuote * = 46;  (* end of quoted block                     *)
  73.  
  74.   maxStrMsg  * = 47;  (* current number of defined strings       *)
  75.  
  76.  
  77. (*****************************************************************************)
  78.  
  79. TYPE
  80.  
  81. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  82.   LocalePtr * = UNTRACED POINTER TO Locale;
  83.   Locale* = STRUCT
  84.     localeName     * : e.STRPTR;             (* locale's name               *)
  85.     languageName   * : e.STRPTR;             (* language of this locale     *)
  86.     prefLanguages  * : ARRAY 10 OF e.STRPTR; (* preferred languages         *)
  87.     flags          * : LONGINT;              (* see below                   *)
  88.  
  89.     codeSet        * : LONGINT;              (* for now, always 0           *)
  90.     countryCode    * : LONGINT;              (* user's country code         *)
  91.     telephoneCode  * : LONGINT;              (* country's telephone code    *)
  92.     gmtOffset      * : LONGINT;              (* minutes from GMT            *)
  93.     measuringSystem* : SHORTINT;             (* what measuring system?      *)
  94.     reserved0      * : ARRAY 3 OF SHORTINT;
  95.  
  96.     dateTimeFormat * : e.STRPTR;             (* regular date & time format  *)
  97.     dateFormat     * : e.STRPTR;             (* date format by itself       *)
  98.     timeFormat     * : e.STRPTR;             (* time format by itself       *)
  99.  
  100.     shortDateTimeFormat  * : e.STRPTR;       (* short date & time format    *)
  101.     shortDateFormat      * : e.STRPTR;       (* short date format by itself *)
  102.     shortTimeFormat      * : e.STRPTR;       (* short time format by itself *)
  103.  
  104.     (* for numeric values *)
  105.     decimalPoint         * : e.STRPTR;       (* character before the decimals   *)
  106.     groupSeparator       * : e.STRPTR;       (* separates groups of digits      *)
  107.     fracGroupSeparator   * : e.STRPTR;       (* separates groups of digits      *)
  108.     grouping             * : e.ADDRESS;      (* size of each group              *)
  109.     fracGrouping         * : e.ADDRESS;      (* size of each group              *)
  110.  
  111.     (* for monetary values *)
  112.     monDecimalPoint      * : e.STRPTR;
  113.     monGroupSeparator    * : e.STRPTR;
  114.     monFracGroupSeparator* : e.STRPTR;
  115.     monGrouping          * : e.ADDRESS;
  116.     monFracGrouping      * : e.ADDRESS;
  117.     monFracDigits        * : SHORTINT;       (* digits after the decimal point  *)
  118.     monIntFracDigits     * : SHORTINT;       (* for international representation*)
  119.     reserved1            * : ARRAY 2 OF SHORTINT;
  120.  
  121.     (* for currency symbols *)
  122.     monCS                * : e.STRPTR;       (* currency symbol                 *)
  123.     monSmallCS           * : e.STRPTR;       (* symbol for small amounts        *)
  124.     monIntCS             * : e.STRPTR;       (* internationl (ISO 4217) code    *)
  125.  
  126.     (* for positive monetary values *)
  127.     monPositiveSign      * : e.STRPTR;       (* indicate positive money value   *)
  128.     monPositiveSpaceSep  * : SHORTINT;       (* determine if separated by space *)
  129.     monPositiveSignPos   * : SHORTINT;       (* position of positive sign       *)
  130.     monPositiveCSPos     * : SHORTINT;       (* position of currency symbol     *)
  131.     reserved2            * : SHORTINT;
  132.  
  133.     (* for negative monetary values *)
  134.     monNegativeSign      * : e.STRPTR;       (* indicate negative money value   *)
  135.     monNegativeSpaceSep  * : SHORTINT;       (* determine if separated by space *)
  136.     monNegativeSignPos   * : SHORTINT;       (* position of negative sign       *)
  137.     monNegativeCSPos     * : SHORTINT;       (* position of currency symbol     *)
  138.     reserved3            * : SHORTINT;
  139.   END;
  140.  
  141. CONST
  142.  
  143. (* flags for Locale.flags *)
  144.   locbUsesDst* = 0;  (* user uses daylight savings time? *)
  145.  
  146. (* constants for Locale.measuringSystem *)
  147.   iso        * = 0;  (* international metric system *)
  148.   american   * = 1;  (* american system             *)
  149.   imperial   * = 2;  (* imperial system             *)
  150.   british    * = 3;  (* british system              *)
  151.  
  152. (* constants for Locale.monPositiveSpaceSep and Locale.monNegativeSpaceSep *)
  153.   nospace    * = 0;  (* cur. symbol is NOT separated from value with a space *)
  154.   space      * = 1;  (* cur. symbol IS separated from value with a space     *)
  155.  
  156. (* constants for Locale.monPositiveSignPos and Locale.monNegativeSignPos *)
  157.   parens     * = 0;  (* () surround the quantity and currencySymbol    *)
  158.   precAll    * = 1;  (* sign string comes before amount and symbol     *)
  159.   succAll    * = 2;  (* sign string comes after amount and symbol      *)
  160.   precCurr   * = 3;  (* sign string comes right before currency symbol *)
  161.   succCurr   * = 4;  (* sign string comes right after currency symbol  *)
  162.  
  163. (* constants for Locale.monPositiveCSPos and Locale.monNegativeCSPos *)
  164.   precedes   * = 0;  (* currency symbol comes before value *)
  165.   succeeds   * = 1;  (* currency symbol comes after value  *)
  166.  
  167. (* elements of the byte arrays pointed to by:
  168.  *   Locale.grouping
  169.  *   Locale.fracGrouping
  170.  *   Locale.monGrouping
  171.  *   Locale.monFracGrouping
  172.  * are interpreted as follows:
  173.  *
  174.  *    255     indicates that no further grouping is to be performed
  175.  *    0       indicates that the previous element is to be repeatedly used
  176.  *            for the remainder of the digits
  177.  *    <other> the number of digits that comprises the current group
  178.  *)
  179.  
  180.  
  181. (*****************************************************************************)
  182.  
  183.  
  184. (* Tags for OpenCatalog() *)
  185.   tagBase    * = u.user + 90000H;
  186.  
  187.   builtInLanguage * = tagBase+1;  (* language of built-in strings    *)
  188.   builtInCodeSet  * = tagBase+2;  (* code set of built-in strings    *)
  189.   version         * = tagBase+3;  (* catalog version number required *)
  190.   language        * = tagBase+4;  (* preferred language of catalog   *)
  191.  
  192.  
  193. (*****************************************************************************)
  194.  
  195.  
  196. (* Comparison types for StrnCmp() *)
  197.   ascii      * = 0;
  198.   collate1   * = 1;
  199.   collate2   * = 2;
  200.  
  201.  
  202. (*****************************************************************************)
  203.  
  204.  
  205. TYPE
  206.  
  207. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  208.   CatalogPtr * = UNTRACED POINTER TO Catalog;
  209.   Catalog    * = STRUCT (link * : e.Node) (* for internal linkage    *)
  210.     pad       * : INTEGER;     (* to longword align       *)
  211.     language  * : e.STRPTR;    (* language of the catalog *)
  212.     codeSet   * : LONGINT;     (* currently always 0      *)
  213.     version   * : INTEGER;     (* version of the catalog  *)
  214.     revision  * : INTEGER;     (* revision of the catalog *)
  215.   END;
  216.  
  217.  
  218. (*****************************************************************************)
  219.  
  220. VAR
  221.   base * : e.LibraryPtr;
  222.  
  223. PROCEDURE CloseCatalog  *{base,-36}(catalog{8}       : CatalogPtr);
  224. PROCEDURE CloseLocale   *{base,-42}(locale{8}        : LocalePtr);
  225. PROCEDURE ConvToLower   *{base,-48}(locale{8}        : LocalePtr;
  226.                                     character{0}     : CHAR): CHAR;
  227. PROCEDURE ConvToUpper   *{base,-54}(locale{8}        : LocalePtr;
  228.                                     character{0}     : CHAR): CHAR;
  229. PROCEDURE FormatDate    *{base,-60}(locale{8}        : LocalePtr;
  230.                                     string{9}        : ARRAY OF CHAR;
  231.                                     date{10}         : d.Date;
  232.                                     putCharFunc{11}  : u.HookPtr);
  233. PROCEDURE FormatString  *{base,-66}(locale{8}        : LocalePtr;
  234.                                     string{9}        : ARRAY OF CHAR;
  235.                                     dataStream{10}   : e.ADDRESS;
  236.                                     putCharFunc{11}  : u.HookPtr): e.ADDRESS;
  237. PROCEDURE GetCatalogStr *{base,-72}(catalog{8}       : CatalogPtr;
  238.                                     stringNum{0}     : LONGINT;
  239.                                     defaultString{9} : ARRAY OF CHAR): e.STRPTR;
  240. PROCEDURE GetLocaleStr  *{base,-78}(locale{8}        : LocalePtr;
  241.                                     stringNum{0}     : LONGINT): e.STRPTR;
  242. PROCEDURE IsAlNum       *{base,-84}(locale{8}        : LocalePtr;
  243.                                     character{0}     : CHAR): BOOLEAN;
  244. PROCEDURE IsAlpha       *{base,-90}(locale{8}        : LocalePtr;
  245.                                     character{0}     : CHAR): BOOLEAN;
  246. PROCEDURE IsCntrl       *{base,-96}(locale{8}        : LocalePtr;
  247.                                     character{0}     : CHAR): BOOLEAN;
  248. PROCEDURE IsDigit      *{base,-102}(locale{8}        : LocalePtr;
  249.                                     character{0}     : CHAR): BOOLEAN;
  250. PROCEDURE IsGraph      *{base,-108}(locale{8}        : LocalePtr;
  251.                                     character{0}     : CHAR): BOOLEAN;
  252. PROCEDURE IsLower      *{base,-114}(locale{8}        : LocalePtr;
  253.                                     character{0}     : CHAR): BOOLEAN;
  254. PROCEDURE IsPrint      *{base,-120}(locale{8}        : LocalePtr;
  255.                                     character{0}     : CHAR): BOOLEAN;
  256. PROCEDURE IsPunct      *{base,-126}(locale{8}        : LocalePtr;
  257.                                     character{0}     : CHAR): BOOLEAN;
  258. PROCEDURE IsSpace      *{base,-132}(locale{8}        : LocalePtr;
  259.                                     character{0}     : CHAR): BOOLEAN;
  260. PROCEDURE IsUpper      *{base,-138}(locale{8}        : LocalePtr;
  261.                                     character{0}     : CHAR): BOOLEAN;
  262. PROCEDURE IsXDigit     *{base,-144}(locale{8}        : LocalePtr;
  263.                                     character{0}     : CHAR): BOOLEAN;
  264. PROCEDURE OpenCatalogA *{base,-150}(locale{8}        : LocalePtr;
  265.                                     name{9}          : ARRAY OF CHAR;
  266.                                     tagList{10}      : ARRAY OF u.TagItem): CatalogPtr;
  267. PROCEDURE OpenCatalog  *{base,-150}(locale{8}        : LocalePtr;
  268.                                     name{9}          : ARRAY OF CHAR;
  269.                                     tag1{10}..       : u.Tag): CatalogPtr;
  270. PROCEDURE OpenLocale   *{base,-156}(name{8}          : ARRAY OF CHAR): LocalePtr;
  271. PROCEDURE ParseDate    *{base,-162}(locale{8}        : LocalePtr;
  272.                                     date{9}          : d.Date;
  273.                                     template{10}     : ARRAY OF CHAR;
  274.                                     getCharFunc{11}  : u.HookPtr): BOOLEAN;
  275. PROCEDURE StrConvert   *{base,-174}(locale{8}        : LocalePtr;
  276.                                     string{9}        : ARRAY OF CHAR;
  277.                                     VAR buffer{10}   : ARRAY OF CHAR;
  278.                                     bufferSize{0}    : LONGINT;
  279.                                     type{1}          : LONGINT): LONGINT;
  280. PROCEDURE StrnCmp      *{base,-180}(locale{8}        : LocalePtr;
  281.                                     string1{9}       : ARRAY OF CHAR;
  282.                                     string2{10}      : ARRAY OF CHAR;
  283.                                     length{0}        : LONGINT;
  284.                                     type{1}          : LONGINT): LONGINT;
  285.  
  286. BEGIN
  287.   base := e.OpenLibrary (localeName, 38);
  288. CLOSE
  289.   IF base#NIL THEN e.CloseLibrary (base) END;
  290. END Locale.
  291.  
  292.