DEADSOFTWARE

Port, TODO
[bbcp.git] / Trurl-based / _LinuxOpenBSD_ / Host / Mod / Lang.txt
1 MODULE HostLang;
3 (* THIS IS TEXT COPY OF Lang.odc *)
4 (* DO NOT EDIT *)
6 (*
7 A. V. Shiryaev, 2012.10
9 LANG environment variable support
10 Dialog.LanguageHook implementation
11 *)
13 IMPORT Dialog, Libc := LinLibc;
15 CONST
16 defLang = "";
17 defCountry = "";
18 defEnc = "ASCII";
20 TYPE
21 LanguageHook = POINTER TO RECORD (Dialog.LanguageHook) END;
23 Country = ARRAY 3 OF SHORTCHAR;
24 Encoding = ARRAY 32 OF SHORTCHAR;
26 VAR
27 lang-: Dialog.Language;
28 enc-: Encoding;
30 PROCEDURE ParseLang (OUT lang: Dialog.Language; OUT country: Country; OUT enc: Encoding);
31 VAR env: Libc.PtrSTR;
32 i, j: INTEGER;
34 PROCEDURE Default;
35 BEGIN
36 lang := defLang;
37 country := defCountry;
38 enc := defEnc
39 END Default;
41 PROCEDURE IsValidEncChar (x: SHORTCHAR): BOOLEAN;
42 BEGIN
43 RETURN ((x >= 'A') & (x <= 'Z')) OR ((x >= '0') & (x <= '9')) OR (x = '-') OR (x = '_')
44 OR ((x >= 'a') & (x <= 'z'))
45 END IsValidEncChar;
47 BEGIN
48 env := Libc.getenv("LANG");
49 IF env # NIL THEN
50 IF env$ = "C" THEN
51 lang := ""; country := ""; enc := "ASCII"
52 ELSE
53 i := 0;
54 WHILE (i < 2) & (env[i] >= 'a') & (env[i] <= 'z') & (i < LEN(lang) - 1) DO
55 lang[i] := env[i];
56 INC(i)
57 END;
58 IF (i = 2) & (env[i] = '_') & (i < LEN(lang)) THEN
59 lang[i] := 0X;
60 INC(i);
61 j := 0;
62 WHILE (i < 5) & (env[i] >= 'A') & (env[i] <= 'Z') & (j < LEN(country) - 1) DO
63 country[j] := env[i];
64 INC(j); INC(i)
65 END;
66 IF (i = 5) & (env[i] = '.') & (j < LEN(country)) THEN
67 country[j] := 0X;
68 INC(i);
69 j := 0;
70 WHILE IsValidEncChar(env[i]) & (j < LEN(enc) - 1) DO
71 enc[j] := env[i];
72 INC(j); INC(i)
73 END;
74 IF (env[i] = 0X) & (j < LEN(enc)) THEN
75 enc[j] := 0X
76 ELSE Default
77 END
78 ELSE Default
79 END
80 ELSE Default
81 END
82 END
83 ELSE Default
84 END
85 END ParseLang;
87 PROCEDURE (hook: LanguageHook) SetLanguage (
88 lang: Dialog.Language; persistent: BOOLEAN; OUT ok: BOOLEAN
89 );
90 BEGIN
91 ok := (lang = "") OR (LEN(lang$) = 2);
92 (*
93 IF ok & persistent THEN HostRegistry.WriteString("language", lang) END
94 *)
95 END SetLanguage;
97 PROCEDURE (hook: LanguageHook) GetPersistentLanguage (OUT l: Dialog.Language);
98 VAR res: INTEGER; s: ARRAY 32 OF CHAR;
99 BEGIN
100 (*
101 HostRegistry.ReadString("language", s, res);
102 IF res = 0 THEN
103 ASSERT((s = "") OR (LEN(s$) = 2), 100);
104 lang := s$
105 ELSE lang := ""
106 END
107 *)
108 l := lang
109 END GetPersistentLanguage;
111 PROCEDURE Init;
112 VAR languageHook: LanguageHook;
113 country: Country;
114 BEGIN
115 ParseLang(lang, country, enc);
116 NEW(languageHook); Dialog.SetLanguageHook(languageHook); Dialog.ResetLanguage
117 END Init;
119 BEGIN
120 Init
121 END HostLang.