MODULE HostRegistry; (* THIS IS TEXT COPY OF Registry.odc *) (* DO NOT EDIT *) IMPORT WinApi, HostFiles, Dialog, Strings; VAR localeId*: INTEGER; PROCEDURE ReadString* ( IN key: ARRAY OF CHAR; OUT str: ARRAY OF CHAR; VAR res: INTEGER ); VAR r, len: INTEGER; sw, comp, appl, vers: WinApi.HANDLE; BEGIN res := WinApi.RegOpenKeyW(WinApi.HKEY_CURRENT_USER, "Software", sw); IF res = 0 THEN res := WinApi.RegOpenKeyW(sw, "Oberon", comp); IF res = 0 THEN res := WinApi.RegOpenKeyW(comp, Dialog.appName, appl); IF res = 0 THEN res := WinApi.RegOpenKeyW(appl, "CurrentVersion", vers); IF res = 0 THEN len := LEN(str); res := WinApi.RegQueryValueW(vers, key, str, len); r := WinApi.RegCloseKey(vers) END; r := WinApi.RegCloseKey(appl) END; r := WinApi.RegCloseKey(comp) END; r := WinApi.RegCloseKey(sw) END END ReadString; PROCEDURE ReadInt* (IN key: ARRAY OF CHAR; OUT x: INTEGER; OUT res: INTEGER); VAR str: ARRAY 64 OF CHAR; BEGIN ReadString(key, str, res); IF res = 0 THEN Strings.StringToInt(str, x, res) END; END ReadInt; PROCEDURE ReadBool* (IN key: ARRAY OF CHAR; OUT x: BOOLEAN; OUT res: INTEGER); VAR str: ARRAY 4 OF CHAR; BEGIN ReadString(key, str, res); IF res = 0 THEN x := str = "1" END END ReadBool; PROCEDURE ReadIntList* (IN key: ARRAY OF CHAR; OUT x: ARRAY OF INTEGER; OUT res: INTEGER); VAR i, n, val, sig: INTEGER; str: ARRAY 256 OF CHAR; BEGIN ReadString(key, str, res); IF res = 0 THEN n := 0; i := 0; WHILE str[i] # 0X DO IF n >= LEN(x) THEN res := 2; RETURN END; val := 0; sig := 1; IF str[i] = "-" THEN sig := -1; INC(i) END; WHILE (str[i] >= "0") & (str[i] <= "9") DO val := 10 * val + ORD(str[i]) - ORD("0"); INC(i) END; x[n] := sig * val; IF str[i] = "," THEN INC(i) ELSIF str[i] # 0X THEN res := 1; RETURN END; INC(n) END END END ReadIntList; PROCEDURE WriteString* (IN key: ARRAY OF CHAR; IN str: ARRAY OF CHAR); VAR res: INTEGER; sw, comp, appl, vers: WinApi.HANDLE; BEGIN res := WinApi.RegCreateKeyW(WinApi.HKEY_CURRENT_USER, "Software", sw); IF res = 0 THEN res := WinApi.RegCreateKeyW(sw, "Oberon", comp); IF res = 0 THEN res := WinApi.RegCreateKeyW(comp, Dialog.appName, appl); IF res = 0 THEN res := WinApi.RegCreateKeyW(appl, "CurrentVersion", vers); IF res = 0 THEN res := WinApi.RegSetValueW(vers, key, WinApi.REG_SZ, str, LEN(str$) * 2) END; res := WinApi.RegCloseKey(appl) END; res := WinApi.RegCloseKey(comp) END; res := WinApi.RegCloseKey(sw) END END WriteString; PROCEDURE WriteInt* (IN key: ARRAY OF CHAR; x: INTEGER); VAR str: ARRAY 64 OF CHAR; BEGIN Strings.IntToString(x, str); WriteString(key, str) END WriteInt; PROCEDURE WriteBool* (IN key: ARRAY OF CHAR; x: BOOLEAN); BEGIN IF x THEN WriteString(key, "1") ELSE WriteString(key, "0") END END WriteBool; PROCEDURE WriteIntList* (IN key: ARRAY OF CHAR; IN x: ARRAY OF INTEGER); VAR i,j, n: INTEGER; str: ARRAY 256 OF CHAR; s: ARRAY 16 OF CHAR; BEGIN n := 0; i := 0; WHILE n < LEN(x) DO IF (n > 0) & (i < LEN(str)) THEN str[i] := ","; INC(i) END; Strings.IntToString(x[n], s); j := 0; WHILE (s[j] # 0X) & (i < LEN(str)) DO str[i] := s[j]; INC(i); INC(j) END; INC(n) END; IF i < LEN(str) THEN str[i] := 0X ELSE str[LEN(str) - 1] := 0X END; WriteString(key, str) END WriteIntList; PROCEDURE ReadMeasure; VAR res, len: INTEGER; cp, int: WinApi.HANDLE; str: ARRAY 4 OF CHAR; BEGIN res := WinApi.GetProfileIntW("intl", "iMeasure", 1); Dialog.metricSystem := res = 0 END ReadMeasure; PROCEDURE Init; VAR name, bname: Dialog.String; res, i, v: INTEGER; BEGIN v := WinApi.GetVersion(); localeId := 1024; (* user default *) name := HostFiles.appName$; bname := "BLACKBOX"; i := 0; WHILE (i < 8) & (CAP(name[i]) = bname[i]) DO INC(i) END; IF i = 8 THEN name := "BlackBox" ELSIF (v < 0) & (v MOD 256 < 4) THEN i := 1; WHILE name[i] # 0X DO IF (name[i] >= "A") & (name[i] <= "Z") THEN name[i] := CHR(ORD(name[i]) + ORD("a") - ORD("A")) END; INC(i) END END; Dialog.appName := name$; Dialog.version := 16; Dialog.Call("Startup.Setup", "", res); ReadMeasure END Init; BEGIN Init END HostRegistry.