Commit 9f5e1712cb19bcd78e5591f08a416e1a715959dc
1 parent
1bf34335
Exists in
master
and in
3 other branches
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 | } | ... | ... |