Registry.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. MODULE HostRegistry;
  2. (* THIS IS TEXT COPY OF Registry.odc *)
  3. (* DO NOT EDIT *)
  4. IMPORT WinApi, HostFiles, Dialog, Strings;
  5. VAR localeId*: INTEGER;
  6. PROCEDURE ReadString* (
  7. IN key: ARRAY OF CHAR; OUT str: ARRAY OF CHAR; VAR res: INTEGER
  8. );
  9. VAR r, len: INTEGER; sw, comp, appl, vers: WinApi.HANDLE;
  10. BEGIN
  11. res := WinApi.RegOpenKeyW(WinApi.HKEY_CURRENT_USER, "Software", sw);
  12. IF res = 0 THEN
  13. res := WinApi.RegOpenKeyW(sw, "Oberon", comp);
  14. IF res = 0 THEN
  15. res := WinApi.RegOpenKeyW(comp, Dialog.appName, appl);
  16. IF res = 0 THEN
  17. res := WinApi.RegOpenKeyW(appl, "CurrentVersion", vers);
  18. IF res = 0 THEN
  19. len := LEN(str);
  20. res := WinApi.RegQueryValueW(vers, key, str, len);
  21. r := WinApi.RegCloseKey(vers)
  22. END;
  23. r := WinApi.RegCloseKey(appl)
  24. END;
  25. r := WinApi.RegCloseKey(comp)
  26. END;
  27. r := WinApi.RegCloseKey(sw)
  28. END
  29. END ReadString;
  30. PROCEDURE ReadInt* (IN key: ARRAY OF CHAR; OUT x: INTEGER; OUT res: INTEGER);
  31. VAR str: ARRAY 64 OF CHAR;
  32. BEGIN
  33. ReadString(key, str, res);
  34. IF res = 0 THEN Strings.StringToInt(str, x, res) END;
  35. END ReadInt;
  36. PROCEDURE ReadBool* (IN key: ARRAY OF CHAR; OUT x: BOOLEAN; OUT res: INTEGER);
  37. VAR str: ARRAY 4 OF CHAR;
  38. BEGIN
  39. ReadString(key, str, res);
  40. IF res = 0 THEN x := str = "1" END
  41. END ReadBool;
  42. PROCEDURE ReadIntList* (IN key: ARRAY OF CHAR; OUT x: ARRAY OF INTEGER; OUT res: INTEGER);
  43. VAR i, n, val, sig: INTEGER; str: ARRAY 256 OF CHAR;
  44. BEGIN
  45. ReadString(key, str, res);
  46. IF res = 0 THEN
  47. n := 0; i := 0;
  48. WHILE str[i] # 0X DO
  49. IF n >= LEN(x) THEN res := 2; RETURN END;
  50. val := 0; sig := 1;
  51. IF str[i] = "-" THEN sig := -1; INC(i) END;
  52. WHILE (str[i] >= "0") & (str[i] <= "9") DO val := 10 * val + ORD(str[i]) - ORD("0"); INC(i) END;
  53. x[n] := sig * val;
  54. IF str[i] = "," THEN INC(i)
  55. ELSIF str[i] # 0X THEN res := 1; RETURN
  56. END;
  57. INC(n)
  58. END
  59. END
  60. END ReadIntList;
  61. PROCEDURE WriteString* (IN key: ARRAY OF CHAR; IN str: ARRAY OF CHAR);
  62. VAR res: INTEGER; sw, comp, appl, vers: WinApi.HANDLE;
  63. BEGIN
  64. res := WinApi.RegCreateKeyW(WinApi.HKEY_CURRENT_USER, "Software", sw);
  65. IF res = 0 THEN
  66. res := WinApi.RegCreateKeyW(sw, "Oberon", comp);
  67. IF res = 0 THEN
  68. res := WinApi.RegCreateKeyW(comp, Dialog.appName, appl);
  69. IF res = 0 THEN
  70. res := WinApi.RegCreateKeyW(appl, "CurrentVersion", vers);
  71. IF res = 0 THEN
  72. res := WinApi.RegSetValueW(vers, key, WinApi.REG_SZ, str, LEN(str$) * 2)
  73. END;
  74. res := WinApi.RegCloseKey(appl)
  75. END;
  76. res := WinApi.RegCloseKey(comp)
  77. END;
  78. res := WinApi.RegCloseKey(sw)
  79. END
  80. END WriteString;
  81. PROCEDURE WriteInt* (IN key: ARRAY OF CHAR; x: INTEGER);
  82. VAR str: ARRAY 64 OF CHAR;
  83. BEGIN
  84. Strings.IntToString(x, str);
  85. WriteString(key, str)
  86. END WriteInt;
  87. PROCEDURE WriteBool* (IN key: ARRAY OF CHAR; x: BOOLEAN);
  88. BEGIN
  89. IF x THEN WriteString(key, "1") ELSE WriteString(key, "0") END
  90. END WriteBool;
  91. PROCEDURE WriteIntList* (IN key: ARRAY OF CHAR; IN x: ARRAY OF INTEGER);
  92. VAR i,j, n: INTEGER; str: ARRAY 256 OF CHAR; s: ARRAY 16 OF CHAR;
  93. BEGIN
  94. n := 0; i := 0;
  95. WHILE n < LEN(x) DO
  96. IF (n > 0) & (i < LEN(str)) THEN str[i] := ","; INC(i) END;
  97. Strings.IntToString(x[n], s); j := 0;
  98. WHILE (s[j] # 0X) & (i < LEN(str)) DO str[i] := s[j]; INC(i); INC(j) END;
  99. INC(n)
  100. END;
  101. IF i < LEN(str) THEN str[i] := 0X ELSE str[LEN(str) - 1] := 0X END;
  102. WriteString(key, str)
  103. END WriteIntList;
  104. PROCEDURE ReadMeasure;
  105. VAR res, len: INTEGER; cp, int: WinApi.HANDLE; str: ARRAY 4 OF CHAR;
  106. BEGIN
  107. res := WinApi.GetProfileIntW("intl", "iMeasure", 1);
  108. Dialog.metricSystem := res = 0
  109. END ReadMeasure;
  110. PROCEDURE Init;
  111. VAR name, bname: Dialog.String; res, i, v: INTEGER;
  112. BEGIN
  113. v := WinApi.GetVersion();
  114. localeId := 1024; (* user default *)
  115. name := HostFiles.appName$;
  116. bname := "BLACKBOX"; i := 0;
  117. WHILE (i < 8) & (CAP(name[i]) = bname[i]) DO INC(i) END;
  118. IF i = 8 THEN
  119. name := "BlackBox"
  120. ELSIF (v < 0) & (v MOD 256 < 4) THEN
  121. i := 1;
  122. WHILE name[i] # 0X DO
  123. IF (name[i] >= "A") & (name[i] <= "Z") THEN name[i] := CHR(ORD(name[i]) + ORD("a") - ORD("A")) END;
  124. INC(i)
  125. END
  126. END;
  127. Dialog.appName := name$;
  128. Dialog.version := 16;
  129. Dialog.Call("Startup.Setup", "", res);
  130. ReadMeasure
  131. END Init;
  132. BEGIN
  133. Init
  134. END HostRegistry.