Commit 9f5e1712cb19bcd78e5591f08a416e1a715959dc

Authored by Perry Werneck
1 parent 1bf34335

Initializing toggle defaults from windows registry (when available).

Showing 1 changed file with 53 additions and 2 deletions   Show diff stats
src/core/toggles/init.c
... ... @@ -116,7 +116,7 @@ void initialize_toggles(H3270 *session)
116 116 LIB3270_TOGGLE_ID id;
117 117 void (*upcall)(H3270 *session, const struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
118 118 }
119   - upcalls[] =
  119 + upcalls[LIB3270_TOGGLE_COUNT] =
120 120 {
121 121 {
122 122 LIB3270_TOGGLE_RECTANGLE_SELECT,
... ... @@ -150,15 +150,66 @@ void initialize_toggles(H3270 *session)
150 150  
151 151 unsigned int f;
152 152  
  153 + // Set defaults
153 154 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
  155 + {
154 156 session->toggle[f].upcall = toggle_nop;
  157 + session->toggle[f].value = toggle_descriptor[f].def;
  158 + }
155 159  
  160 + // Load upcalls
156 161 for(f=0;f<(sizeof(upcalls)/sizeof(upcalls[0]));f++)
157 162 session->toggle[upcalls[f].id].upcall = upcalls[f].upcall;
158 163  
  164 +#ifdef _WIN32
  165 + {
  166 + HKEY hKey;
  167 + DWORD disp = 0;
  168 + LSTATUS rc = RegCreateKeyEx(
  169 + HKEY_LOCAL_MACHINE,
  170 + "Software\\" LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME) "\\toggles",
  171 + 0,
  172 + NULL,
  173 + REG_OPTION_NON_VOLATILE,
  174 + KEY_QUERY_VALUE|KEY_READ,
  175 + NULL,
  176 + &hKey,
  177 + &disp);
  178 +
  179 + if(rc == ERROR_SUCCESS)
  180 + {
  181 + debug("%s: Loading toggles from registry",__FUNCTION__);
  182 + for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
  183 + {
  184 + DWORD val = 0;
  185 + DWORD cbData = sizeof(DWORD);
  186 +
  187 + DWORD dwRet = RegQueryValueEx(
  188 + hKey,
  189 + lib3270_toggle_get_from_id(f)->name,
  190 + NULL,
  191 + NULL,
  192 + (LPBYTE) &val,
  193 + &cbData
  194 + );
  195 +
  196 + debug("get(%s)=%d",lib3270_toggle_get_from_id(f)->name,(int) dwRet);
  197 + if(dwRet == ERROR_SUCCESS)
  198 + {
  199 + debug("toggle.%s=%s",lib3270_toggle_get_from_id(f)->name,val ? "True" : "False");
  200 + session->toggle[f].value = (val ? True : False);
  201 + }
  202 +
  203 + }
  204 + RegCloseKey(hKey);
  205 + }
  206 +
  207 + }
  208 +#endif // _WIN32
  209 +
  210 + // Initialize upcalls.
159 211 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
160 212 {
161   - session->toggle[f].value = toggle_descriptor[f].def;
162 213 if(session->toggle[f].value)
163 214 session->toggle[f].upcall(session,&session->toggle[f],LIB3270_TOGGLE_TYPE_INITIAL);
164 215 }
... ...