-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
imported from ldmicro-rel2.2.zip (md5 2343a9f2f15bf07879ec78f30f17d6b1)
- Loading branch information
1 parent
662ae93
commit 6b1b7ed
Showing
76 changed files
with
29,845 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,208 @@ | ||
/* | ||
* A library for storing parameters in the registry. | ||
* | ||
* Jonathan Westhues, 2002 | ||
*/ | ||
#include <windows.h> | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
|
||
/* | ||
* store a window's position in the registry, or fail silently if the registry calls don't work | ||
*/ | ||
void FreezeWindowPosF(HWND hwnd, char *subKey, char *name) | ||
{ | ||
RECT r; | ||
GetWindowRect(hwnd, &r); | ||
|
||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return; | ||
|
||
char *keyName = (char *)malloc(strlen(name) + 30); | ||
if(!keyName) | ||
return; | ||
|
||
HKEY sub; | ||
if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_left", name); | ||
if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.left), sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_right", name); | ||
if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.right), sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_top", name); | ||
if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.top), sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_bottom", name); | ||
if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.bottom), sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_maximized", name); | ||
DWORD v = IsZoomed(hwnd); | ||
if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(v), sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
|
||
free(keyName); | ||
} | ||
|
||
static void Clamp(LONG *v, LONG min, LONG max) | ||
{ | ||
if(*v < min) *v = min; | ||
if(*v > max) *v = max; | ||
} | ||
|
||
/* | ||
* retrieve a window's position from the registry, or do nothing if there is no info saved | ||
*/ | ||
void ThawWindowPosF(HWND hwnd, char *subKey, char *name) | ||
{ | ||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return; | ||
|
||
HKEY sub; | ||
if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS) | ||
return; | ||
|
||
char *keyName = (char *)malloc(strlen(name) + 30); | ||
if(!keyName) | ||
return; | ||
|
||
DWORD l; | ||
RECT r; | ||
|
||
sprintf(keyName, "%s_left", name); | ||
l = sizeof(DWORD); | ||
if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.left), &l) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_right", name); | ||
l = sizeof(DWORD); | ||
if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.right), &l) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_top", name); | ||
l = sizeof(DWORD); | ||
if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.top), &l) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_bottom", name); | ||
l = sizeof(DWORD); | ||
if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.bottom), &l) != ERROR_SUCCESS) | ||
return; | ||
|
||
sprintf(keyName, "%s_maximized", name); | ||
DWORD v; | ||
l = sizeof(DWORD); | ||
if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS) | ||
return; | ||
if(v) | ||
ShowWindow(hwnd, SW_MAXIMIZE); | ||
|
||
RECT dr; | ||
GetWindowRect(GetDesktopWindow(), &dr); | ||
|
||
// If it somehow ended up off-screen, then put it back. | ||
Clamp(&(r.left), dr.left, dr.right); | ||
Clamp(&(r.right), dr.left, dr.right); | ||
Clamp(&(r.top), dr.top, dr.bottom); | ||
Clamp(&(r.bottom), dr.top, dr.bottom); | ||
if(r.right - r.left < 100) { | ||
r.left -= 300; r.right += 300; | ||
} | ||
if(r.bottom - r.top < 100) { | ||
r.top -= 300; r.bottom += 300; | ||
} | ||
Clamp(&(r.left), dr.left, dr.right); | ||
Clamp(&(r.right), dr.left, dr.right); | ||
Clamp(&(r.top), dr.top, dr.bottom); | ||
Clamp(&(r.bottom), dr.top, dr.bottom); | ||
|
||
MoveWindow(hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE); | ||
|
||
free(keyName); | ||
} | ||
|
||
/* | ||
* store a DWORD setting in the registry | ||
*/ | ||
void FreezeDWORDF(DWORD val, char *subKey, char *name) | ||
{ | ||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return; | ||
|
||
HKEY sub; | ||
if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS) | ||
return; | ||
|
||
if(RegSetValueEx(sub, name, 0, REG_DWORD, (BYTE *)&val, sizeof(DWORD)) != ERROR_SUCCESS) | ||
return; | ||
} | ||
|
||
/* | ||
* retrieve a DWORD setting, or return the default if that setting is unavailable | ||
*/ | ||
DWORD ThawDWORDF(DWORD val, char *subKey, char *name) | ||
{ | ||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return val; | ||
|
||
HKEY sub; | ||
if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS) | ||
return val; | ||
|
||
DWORD l = sizeof(DWORD); | ||
DWORD v; | ||
if(RegQueryValueEx(sub, name, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS) | ||
return val; | ||
|
||
return v; | ||
} | ||
|
||
/* | ||
* store a string setting in the registry | ||
*/ | ||
void FreezeStringF(char *val, char *subKey, char *name) | ||
{ | ||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return; | ||
|
||
HKEY sub; | ||
if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS) | ||
return; | ||
|
||
if(RegSetValueEx(sub, name, 0, REG_SZ, (BYTE *)val, strlen(val)+1) != ERROR_SUCCESS) | ||
return; | ||
} | ||
|
||
/* | ||
* retrieve a string setting, or return the default if that setting is unavailable | ||
*/ | ||
void ThawStringF(char *val, int max, char *subKey, char *name) | ||
{ | ||
HKEY software; | ||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS) | ||
return; | ||
|
||
HKEY sub; | ||
if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS) | ||
return; | ||
|
||
DWORD l = max; | ||
if(RegQueryValueEx(sub, name, NULL, NULL, (BYTE *)val, &l) != ERROR_SUCCESS) | ||
return; | ||
if(l >= (DWORD)max) return; | ||
|
||
val[l] = '\0'; | ||
return; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* A library for storing parameters in the registry. | ||
* | ||
* Jonathan Westhues, 2002 | ||
*/ | ||
|
||
#ifndef __FREEZE_H | ||
#define __FREEZE_H | ||
|
||
#ifndef FREEZE_SUBKEY | ||
#error must define FREEZE_SUBKEY to a string uniquely identifying the app | ||
#endif | ||
|
||
#define FreezeWindowPos(hwnd) FreezeWindowPosF(hwnd, FREEZE_SUBKEY, #hwnd) | ||
void FreezeWindowPosF(HWND hWnd, char *subKey, char *name); | ||
|
||
#define ThawWindowPos(hwnd) ThawWindowPosF(hwnd, FREEZE_SUBKEY, #hwnd) | ||
void ThawWindowPosF(HWND hWnd, char *subKey, char *name); | ||
|
||
#define FreezeDWORD(val) FreezeDWORDF(val, FREEZE_SUBKEY, #val) | ||
void FreezeDWORDF(DWORD val, char *subKey, char *name); | ||
|
||
#define ThawDWORD(val) val = ThawDWORDF(val, FREEZE_SUBKEY, #val) | ||
DWORD ThawDWORDF(DWORD val, char *subKey, char *name); | ||
|
||
#define FreezeString(val) FreezeStringF(val, FREEZE_SUBKEY, #val) | ||
void FreezeStringF(char *val, char *subKey, char *name); | ||
|
||
#define ThawString(val, max) ThawStringF(val, max, FREEZE_SUBKEY, #val) | ||
void ThawStringF(char *val, int max, char *subKey, char *name); | ||
|
||
|
||
#endif |
Oops, something went wrong.