-revert janderwalds change until because it breaks the gcc 4.x build
[reactos.git] / reactos / base / applications / screensavers / matrix / settings.c
1 //
2 // settings.c
3 //
4 // Load/Save settings from registry
5 //
6 #include <windows.h>
7 #include <tchar.h>
8 #include "globals.h"
9 #include "message.h"
10 #include "matrix.h"
11
12 TCHAR g_szMessages[MAX_MESSAGES][MAXMSG_LENGTH];
13 int g_nNumMessages = 0;
14 int g_nMessageSpeed = 5;
15 TCHAR g_szFontName[512] = _T("Arial");
16
17 int g_nMatrixSpeed = 150;
18 int g_nDensity = 32;
19 int g_nFontSize = 12;
20 BOOL g_fRandomizeMessages = FALSE;
21 BOOL g_fFontBold = TRUE;
22 BOOL g_fScreenSaving = FALSE;
23
24 HFONT g_hFont;
25
26 void LoadSettings()
27 {
28 HKEY hkey;
29 LONG value;
30 ULONG len;
31 TCHAR *hugechar = malloc(4096);
32 TCHAR *hptr = hugechar;
33
34 if(hugechar == 0)
35 return;
36
37 hugechar[0] = _T('\0');
38
39 RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Catch22\\Matrix Screen Saver"), 0,
40 _T(""), 0, KEY_READ, NULL, &hkey, NULL);
41
42 len = sizeof value;
43 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("MessageSpeed"), 0, 0, (BYTE *)&value, &len))
44 {
45 if(value >= MSGSPEED_MIN && value <= MSGSPEED_MAX)
46 g_nMessageSpeed = value;
47 }
48
49 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("MatrixSpeed"), 0, 0, (BYTE *)&value, &len))
50 {
51 if(value >= SPEED_MIN && value <= SPEED_MAX)
52 g_nMatrixSpeed = value;
53 }
54
55 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("Density"), 0, 0, (BYTE *)&value, &len))
56 {
57 if(value >= DENSITY_MIN && value <= DENSITY_MAX)
58 g_nDensity = value;
59 }
60
61 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("FontSize"), 0, 0, (BYTE *)&value, &len))
62 {
63 if(value >= FONT_MIN && value <= FONT_MAX)
64 g_nFontSize = value;
65 }
66
67 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("FontBold"), 0, 0, (BYTE *)&value, &len))
68 g_fFontBold = (value == 0 ? FALSE : TRUE);
69
70 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("Randomize"), 0, 0, (BYTE *)&value, &len))
71 g_fRandomizeMessages = (value == 0 ? FALSE : TRUE);
72
73 len = 4096;
74 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("FontName"), 0, 0, (BYTE *)hugechar, &len))
75 {
76 if(len > 0)
77 lstrcpy(g_szFontName, hugechar);
78 else
79 lstrcpy(g_szFontName, _T("Arial"));
80
81 }
82
83 len = 4096;
84
85 if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("Messages"), 0, 0 , (BYTE *)hugechar, &len))
86 {
87 while(len > 0 && *hptr && isascii(*hptr))
88 {
89 if(lstrlen(hptr) > 0)
90 {
91 lstrcpyn(g_szMessages[g_nNumMessages], hptr, MAXMSG_LENGTH);
92 ++g_nNumMessages;
93 hptr += lstrlen(hptr) + 1;
94 }
95 }
96 }
97 else
98 {
99 /* built-in coded message for first run */
100 lstrcpyn(g_szMessages[0], _T("ReactOS"), MAXMSG_LENGTH);
101 ++g_nNumMessages;
102 }
103
104 RegCloseKey(hkey);
105 free(hugechar);
106 }
107
108 void SaveSettings()
109 {
110 HKEY hkey;
111 TCHAR *hugechar = malloc(4096);
112 TCHAR *msgptr = hugechar;
113 int totallen = 0;
114 int i,len;
115 LONG value;
116
117 if(hugechar == 0)
118 return;
119
120 hugechar[0] = _T('\0');
121 msgptr = hugechar;
122
123 RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Catch22\\Matrix Screen Saver"), 0,
124 _T(""), 0, KEY_WRITE, NULL, &hkey, NULL);
125
126 value = g_nMessageSpeed;
127 RegSetValueEx(hkey, _T("MessageSpeed"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
128
129 value = g_nMatrixSpeed;
130 RegSetValueEx(hkey, _T("MatrixSpeed"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
131
132 value = g_nDensity;
133 RegSetValueEx(hkey, _T("Density"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
134
135 value = g_nFontSize;
136 RegSetValueEx(hkey, _T("FontSize"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
137
138 value = g_fRandomizeMessages;
139 RegSetValueEx(hkey, _T("Randomize"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
140
141 value = g_fFontBold;
142 RegSetValueEx(hkey, _T("FontBold"), 0, REG_DWORD, (BYTE *)&value, sizeof value);
143
144 RegSetValueEx(hkey, _T("FontName"), 0, REG_SZ, (BYTE *)g_szFontName, lstrlen(g_szFontName));
145
146 for(i = 0; i < g_nNumMessages; i++)
147 {
148 len = lstrlen(g_szMessages[i]);
149
150 if(len > 0 && totallen+len < 4096)
151 {
152 lstrcpyn(msgptr, g_szMessages[i], 4096-totallen);
153 totallen += len + 1;
154 msgptr += len + 1;
155 }
156 }
157
158 *msgptr = _T('\0');
159 totallen++;
160
161 RegSetValueEx(hkey, _T("Messages"), 0, REG_MULTI_SZ, (BYTE *)hugechar, totallen);
162 RegCloseKey(hkey);
163
164 free(hugechar);
165 }