Commit 2018072f12417b1570da19351865eaa74ea70bb1

Authored by Perry Werneck
1 parent 05595ed8

Loading default values for uint props from windows registry.

src/core/host.c
@@ -326,7 +326,6 @@ LIB3270_EXPORT const char * lib3270_get_default_host(const H3270 GNUC_UNUSED(*hS @@ -326,7 +326,6 @@ LIB3270_EXPORT const char * lib3270_get_default_host(const H3270 GNUC_UNUSED(*hS
326 326
327 RegCloseKey(hKey); 327 RegCloseKey(hKey);
328 328
329 - trace("***************** %d",dwRet);  
330 if(dwRet == ERROR_SUCCESS) 329 if(dwRet == ERROR_SUCCESS)
331 { 330 {
332 default_host = (char *) realloc(default_host,cbData+1); 331 default_host = (char *) realloc(default_host,cbData+1);
src/core/properties/unsigned.c
@@ -147,6 +147,7 @@ static unsigned int lib3270_get_host_type_number(const H3270 *hSession) @@ -147,6 +147,7 @@ static unsigned int lib3270_get_host_type_number(const H3270 *hSession)
147 147
148 { 148 {
149 .name = "unlock_delay", // Property name. 149 .name = "unlock_delay", // Property name.
  150 + .group = LIB3270_ACTION_GROUP_OFFLINE, // Property group.
150 #ifdef UNLOCK_MS 151 #ifdef UNLOCK_MS
151 .default_value = UNLOCK_MS, 152 .default_value = UNLOCK_MS,
152 #else 153 #else
src/core/session.c
@@ -24,8 +24,6 @@ @@ -24,8 +24,6 @@
24 * 24 *
25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) 25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) 26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 * 27 *
30 */ 28 */
31 29
@@ -47,7 +45,7 @@ @@ -47,7 +45,7 @@
47 #include "../ssl/crl.h" 45 #include "../ssl/crl.h"
48 #include <lib3270/trace.h> 46 #include <lib3270/trace.h>
49 #include <lib3270/log.h> 47 #include <lib3270/log.h>
50 - 48 +#include <lib3270/properties.h>
51 49
52 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ 50 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/
53 51
@@ -364,15 +362,62 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -364,15 +362,62 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
364 hSession->pointer = (unsigned short) LIB3270_POINTER_LOCKED; 362 hSession->pointer = (unsigned short) LIB3270_POINTER_LOCKED;
365 363
366 #ifdef UNLOCK_MS 364 #ifdef UNLOCK_MS
367 - hSession->unlock_delay_ms = UNLOCK_MS; 365 + lib3270_set_unlock_delay(hSession,UNLOCK_MS);
368 #else 366 #else
369 - hSession->unlock_delay_ms = 350; 367 + lib3270_set_unlock_delay(hSession,350);
370 #endif // UNLOCK_MS 368 #endif // UNLOCK_MS
371 369
372 // CSD 370 // CSD
373 for(f=0;f<4;f++) 371 for(f=0;f<4;f++)
374 hSession->csd[f] = hSession->saved_csd[f] = LIB3270_ANSI_CSD_US; 372 hSession->csd[f] = hSession->saved_csd[f] = LIB3270_ANSI_CSD_US;
375 373
  374 +#ifdef _WIN32
  375 + // Get defaults from registry.
  376 + {
  377 + HKEY hKey;
  378 + DWORD disp = 0;
  379 + LSTATUS rc = RegCreateKeyEx(
  380 + HKEY_LOCAL_MACHINE,
  381 + "Software\\" LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME) "\\protocol",
  382 + 0,
  383 + NULL,
  384 + REG_OPTION_NON_VOLATILE,
  385 + KEY_QUERY_VALUE|KEY_READ,
  386 + NULL,
  387 + &hKey,
  388 + &disp);
  389 +
  390 + if(rc == ERROR_SUCCESS)
  391 + {
  392 + size_t property;
  393 + const LIB3270_UINT_PROPERTY * uiProps = lib3270_get_unsigned_properties_list();
  394 +
  395 + for(property = 0; uiProps[property].name;property++)
  396 + {
  397 + if(!(uiProps[property].set && uiProps[property].group == LIB3270_ACTION_GROUP_OFFLINE))
  398 + continue;
  399 +
  400 + DWORD val = (DWORD) uiProps[property].default_value;
  401 + DWORD cbData = sizeof(DWORD);
  402 + DWORD dwRet = RegQueryValueEx(hKey, uiProps[property].name, NULL, NULL, (LPBYTE) &val, &cbData);
  403 +
  404 + if(dwRet == ERROR_SUCCESS)
  405 + {
  406 + debug("%s=%u",uiProps[property].name,(unsigned int) val);
  407 + uiProps[property].set(hSession,(unsigned int) val);
  408 + }
  409 + else
  410 + {
  411 + uiProps[property].set(hSession,uiProps[property].default_value);
  412 + }
  413 +
  414 + }
  415 +
  416 + RegCloseKey(hKey);
  417 + }
  418 + }
  419 +#endif // _WIN32
  420 +
376 // Initialize toggles 421 // Initialize toggles
377 initialize_toggles(hSession); 422 initialize_toggles(hSession);
378 423
src/core/windows/registry.c
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 #include <windows.h> 36 #include <windows.h>
37 #include <lib3270.h> 37 #include <lib3270.h>
38 38
39 -LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY phkResult) { 39 +LIB3270_EXPORT LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY phkResult) {
40 40
41 LSTATUS rc; 41 LSTATUS rc;
42 DWORD disp; 42 DWORD disp;
@@ -55,3 +55,16 @@ LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY ph @@ -55,3 +55,16 @@ LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY ph
55 55
56 return rc; 56 return rc;
57 } 57 }
  58 +
  59 +LIB3270_EXPORT DWORD lib3270_win32_get_dword(HKEY hKey, const char *name, DWORD def)
  60 +{
  61 + DWORD val = def;
  62 + DWORD cbData = sizeof(DWORD);
  63 +
  64 + DWORD dwRet = RegQueryValueEx(hKey, name, NULL, NULL, (LPBYTE) &val, &cbData);
  65 +
  66 + if(dwRet != ERROR_SUCCESS)
  67 + return def;
  68 +
  69 + return val;
  70 +}
src/include/lib3270.h
@@ -1561,6 +1561,7 @@ @@ -1561,6 +1561,7 @@
1561 LIB3270_EXPORT const char * lib3270_win32_strerror(int e); 1561 LIB3270_EXPORT const char * lib3270_win32_strerror(int e);
1562 LIB3270_EXPORT const char * lib3270_win32_local_charset(void); 1562 LIB3270_EXPORT const char * lib3270_win32_local_charset(void);
1563 LIB3270_EXPORT LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY phkResult); 1563 LIB3270_EXPORT LSTATUS lib3270_win32_create_regkey(LPCSTR lpSubKey, REGSAM samDesired, PHKEY phkResult);
  1564 + LIB3270_EXPORT DWORD lib3270_win32_get_dword(HKEY hKey, const char *name, DWORD def);
1564 1565
1565 /** 1566 /**
1566 * @brief Translate windows error code. 1567 * @brief Translate windows error code.