diff --git a/blackbox/Usb/Mod/Utils.otd b/blackbox/Usb/Mod/Utils.otd index 4217200..2472881 100644 --- a/blackbox/Usb/Mod/Utils.otd +++ b/blackbox/Usb/Mod/Utils.otd @@ -1,5 +1,5 @@ MODULE UsbUtils; -IMPORT WinApi, Strings, Log := StdLog, XC := XdeCmds; +IMPORT WinApi, Strings, Log := StdLog; CONST HK_LM_JRE_Key = "SOFTWARE\javaSoft\Java Runtime Environment"; @@ -9,6 +9,27 @@ IMPORT WinApi, Strings, Log := StdLog, XC := XdeCmds; HK_CU_PATH_Key = "Environment"; PATH_value = "PATH"; + PROCEDURE RegLMQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR; + OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN; + VAR + res, length: INTEGER; hKey: WinApi.HKEY; + BEGIN + qValue := ""; + res := WinApi.RegOpenKeyEx(WinApi.HKEY_LOCAL_MACHINE, + subKey, 0, WinApi.KEY_QUERY_VALUE, hKey); + IF res # WinApi.ERROR_SUCCESS THEN + RETURN FALSE + ELSE + length := LEN(qValue); + res := WinApi.RegQueryValueEx(hKey, valueName, NIL, NIL, qValue[0], length); + IF res # WinApi.ERROR_SUCCESS THEN + RETURN FALSE + END + END; + res := WinApi.RegCloseKey(hKey); + RETURN TRUE; + END RegLMQuery; + PROCEDURE RegCUQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR; OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN; VAR @@ -53,15 +74,19 @@ IMPORT WinApi, Strings, Log := StdLog, XC := XdeCmds; CONST PATH_Pattern = "\bin\client"; VAR - jreHome, regValue, tmpRegValue: ARRAY 512 OF SHORTCHAR; - pos: INTEGER; noUserPathValue, found: BOOLEAN; + jreHome, regValue, tmpRegValue: ARRAY 2048 OF SHORTCHAR; + pos: INTEGER; noUserPathValue, success, found: BOOLEAN; BEGIN (* get jre home path *) - XC.RegLocalMachineQuery(HK_LM_JRE_Key, HK_LM_JRE_CurrentVersion_value, tmpRegValue); (* e.g. "1.5" *) - XC.RegLocalMachineQuery(HK_LM_JRE_Key + "\" + tmpRegValue, HK_LM_JRE_JavaHome_value, jreHome); + IF ~RegLMQuery(HK_LM_JRE_Key, HK_LM_JRE_CurrentVersion_value, tmpRegValue) (* e.g. "1.5" *) THEN + Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "! Is Java installed?"); Log.Ln; RETURN + END; + IF ~RegLMQuery(HK_LM_JRE_Key + "\" + tmpRegValue, HK_LM_JRE_JavaHome_value, jreHome) THEN + Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "\" + tmpRegValue + "! Is Java installed?"); Log.Ln; RETURN + END; (* look for %javahome%\bin\client on system and user path*) regValue := jreHome + PATH_Pattern; - XC.RegLocalMachineQuery(HK_LM_PATH_Key, PATH_value, tmpRegValue); + found := RegLMQuery(HK_LM_PATH_Key, "Path", tmpRegValue); Strings.Find(LONG(tmpRegValue), LONG(regValue), 0, pos); found := pos >= 0; IF found THEN @@ -78,7 +103,7 @@ IMPORT WinApi, Strings, Log := StdLog, XC := XdeCmds; ELSE tmpRegValue := tmpRegValue + ";" + regValue END; - IF RegCUCreateKeyAndSetValue(HK_CU_PATH_Key, PATH_value, tmpRegValue) THEN + IF RegCUCreateKeyAndSetValue(HK_CU_PATH_Key, PATH_value, tmpRegValue) THEN IF noUserPathValue THEN (* create user PATH value first *) Log.String("user value PATH created"); Log.Ln; END;