4 // Load/Save settings from registry
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");
17 int g_nMatrixSpeed
= 150;
20 BOOL g_fRandomizeMessages
= FALSE
;
21 BOOL g_fFontBold
= TRUE
;
22 BOOL g_fScreenSaving
= FALSE
;
31 TCHAR
*hugechar
= malloc(4096);
32 TCHAR
*hptr
= hugechar
;
37 hugechar
[0] = _T('\0');
39 RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Software\\Catch22\\Matrix Screen Saver"), 0,
40 _T(""), 0, KEY_READ
, NULL
, &hkey
, NULL
);
43 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("MessageSpeed"), 0, 0, (BYTE
*)&value
, &len
))
45 if(value
>= MSGSPEED_MIN
&& value
<= MSGSPEED_MAX
)
46 g_nMessageSpeed
= value
;
49 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("MatrixSpeed"), 0, 0, (BYTE
*)&value
, &len
))
51 if(value
>= SPEED_MIN
&& value
<= SPEED_MAX
)
52 g_nMatrixSpeed
= value
;
55 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("Density"), 0, 0, (BYTE
*)&value
, &len
))
57 if(value
>= DENSITY_MIN
&& value
<= DENSITY_MAX
)
61 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("FontSize"), 0, 0, (BYTE
*)&value
, &len
))
63 if(value
>= FONT_MIN
&& value
<= FONT_MAX
)
67 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("FontBold"), 0, 0, (BYTE
*)&value
, &len
))
68 g_fFontBold
= (value
== 0 ? FALSE
: TRUE
);
70 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("Randomize"), 0, 0, (BYTE
*)&value
, &len
))
71 g_fRandomizeMessages
= (value
== 0 ? FALSE
: TRUE
);
74 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("FontName"), 0, 0, (BYTE
*)hugechar
, &len
))
77 lstrcpy(g_szFontName
, hugechar
);
79 lstrcpy(g_szFontName
, _T("Arial"));
85 if(ERROR_SUCCESS
== RegQueryValueEx(hkey
, _T("Messages"), 0, 0 , (BYTE
*)hugechar
, &len
))
87 while(len
> 0 && *hptr
&& isascii(*hptr
))
91 lstrcpyn(g_szMessages
[g_nNumMessages
], hptr
, MAXMSG_LENGTH
);
93 hptr
+= lstrlen(hptr
) + 1;
99 /* built-in coded message for first run */
100 lstrcpyn(g_szMessages
[0], _T("ReactOS"), MAXMSG_LENGTH
);
111 TCHAR
*hugechar
= malloc(4096);
112 TCHAR
*msgptr
= hugechar
;
120 hugechar
[0] = _T('\0');
123 RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Software\\Catch22\\Matrix Screen Saver"), 0,
124 _T(""), 0, KEY_WRITE
, NULL
, &hkey
, NULL
);
126 value
= g_nMessageSpeed
;
127 RegSetValueEx(hkey
, _T("MessageSpeed"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
129 value
= g_nMatrixSpeed
;
130 RegSetValueEx(hkey
, _T("MatrixSpeed"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
133 RegSetValueEx(hkey
, _T("Density"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
136 RegSetValueEx(hkey
, _T("FontSize"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
138 value
= g_fRandomizeMessages
;
139 RegSetValueEx(hkey
, _T("Randomize"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
142 RegSetValueEx(hkey
, _T("FontBold"), 0, REG_DWORD
, (BYTE
*)&value
, sizeof value
);
144 RegSetValueEx(hkey
, _T("FontName"), 0, REG_SZ
, (BYTE
*)g_szFontName
, lstrlen(g_szFontName
));
146 for(i
= 0; i
< g_nNumMessages
; i
++)
148 len
= lstrlen(g_szMessages
[i
]);
150 if(len
> 0 && totallen
+len
< 4096)
152 lstrcpyn(msgptr
, g_szMessages
[i
], 4096-totallen
);
161 RegSetValueEx(hkey
, _T("Messages"), 0, REG_MULTI_SZ
, (BYTE
*)hugechar
, totallen
);