- Remove much Win9x-specific stuff from the scrnsave library and make it more compatible to the MS version of the library

- Change the 3dtext screensaver to use the library
- Reduce the amount of code in the blankscr screensaver to a minimum
- Remove unneeded resources from both screensavers
- Indentation fixes, MSVC build and warning fixes, small translation fixes, etc. for both screensavers and the library

See issue #2966 for more details.

svn path=/trunk/; revision=32437
This commit is contained in:
Colin Finck 2008-02-20 21:43:41 +00:00
parent 793ebfdd18
commit cfe2ae5fcf
35 changed files with 311 additions and 731 deletions

View file

@ -19,6 +19,7 @@
*/ */
#include <windows.h> #include <windows.h>
#include <scrnsave.h>
#include <math.h> #include <math.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glu.h> #include <GL/glu.h>
@ -27,11 +28,11 @@
#include "resource.h" #include "resource.h"
#include "3dtext.h" #include "3dtext.h"
static HGLRC hRC; // Permanent Rendering Context static HGLRC hRC; // Permanent Rendering Context
static HDC hDC; // Private GDI Device Context static HDC hDC; // Private GDI Device Context
GLuint base; // Base Display List For The Font Set GLuint base; // Base Display List For The Font Set
GLfloat rot; // Used To Rotate The Text GLfloat rot; // Used To Rotate The Text
GLfloat extentX = 0.0f; GLfloat extentX = 0.0f;
GLfloat extentY = 0.0f; GLfloat extentY = 0.0f;
@ -47,7 +48,7 @@ GLvoid BuildFont(GLvoid)
GLYPHMETRICSFLOAT gmf[256]; GLYPHMETRICSFLOAT gmf[256];
// Windows Font Handle // Windows Font Handle
HFONT font; HFONT font;
int i; size_t i;
TCHAR c; TCHAR c;
GLfloat cellOriginX = 0.0f; GLfloat cellOriginX = 0.0f;
GLfloat stringOriginX; GLfloat stringOriginX;
@ -58,31 +59,31 @@ GLvoid BuildFont(GLvoid)
base = glGenLists(256); base = glGenLists(256);
font = CreateFont(-12, font = CreateFont(-12,
0, // Width Of Font 0, // Width Of Font
0, // Angle Of Escapement 0, // Angle Of Escapement
0, // Orientation Angle 0, // Orientation Angle
FW_BOLD, // Font Weight FW_BOLD, // Font Weight
FALSE, // Italic FALSE, // Italic
FALSE, // Underline FALSE, // Underline
FALSE, // Strikeout FALSE, // Strikeout
DEFAULT_CHARSET, // Character Set Identifier DEFAULT_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
_T("Tahoma")); // Font Name _T("Tahoma")); // Font Name
// Selects The Font We Created // Selects The Font We Created
SelectObject(hDC, font); SelectObject(hDC, font);
wglUseFontOutlines(hDC, // Select The Current DC wglUseFontOutlines(hDC, // Select The Current DC
0, // Starting Character 0, // Starting Character
255, // Number Of Display Lists To Build 255, // Number Of Display Lists To Build
base, // Starting Display Lists base, // Starting Display Lists
0.0f, // Deviation From The True Outlines 0.0f, // Deviation From The True Outlines
0.2f, // Font Thickness In The Z Direction 0.2f, // Font Thickness In The Z Direction
WGL_FONT_POLYGONS, // Use Polygons, Not Lines WGL_FONT_POLYGONS, // Use Polygons, Not Lines
gmf); // Address Of Buffer To Recieve Data gmf); // Address Of Buffer To Recieve Data
// Calculate the string extent // Calculate the string extent
for (i = 0; i < _tcslen(m_Text); i++) for (i = 0; i < _tcslen(m_Text); i++)
@ -231,9 +232,9 @@ GLvoid DrawGLScene(GLvoid)
0.0f); 0.0f);
// Pulsing Colors Based On The Rotation // Pulsing Colors Based On The Rotation
glColor3f((1.0f * (cos(rot / 20.0f))), glColor3f((1.0f * (GLfloat)(cos(rot / 20.0f))),
(1.0f * (sin(rot / 25.0f))), (1.0f * (GLfloat)(sin(rot / 25.0f))),
(1.0f - 0.5f * (cos(rot / 17.0f)))); (1.0f - 0.5f * (GLfloat)(cos(rot / 17.0f))));
// Print GL Text To The Screen // Print GL Text To The Screen
glPrint(m_Text); glPrint(m_Text);
@ -246,41 +247,37 @@ GLvoid DrawGLScene(GLvoid)
} }
LRESULT CALLBACK LRESULT CALLBACK
WndProc(HWND hWnd, ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
UINT message,
WPARAM wParam,
LPARAM lParam)
{ {
static POINT ptLast; RECT Screen; // Used Later On To Get The Size Of The Window
static POINT ptCursor; GLuint PixelFormat; // Pixel Format Storage
static BOOL fFirstTime = TRUE; static PIXELFORMATDESCRIPTOR pfd= // Pixel Format Descriptor
RECT Screen; // Used Later On To Get The Size Of The Window
GLuint PixelFormat; // Pixel Format Storage
static PIXELFORMATDESCRIPTOR pfd= // Pixel Format Descriptor
{ {
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
1, // Version Number (?) 1, // Version Number (?)
PFD_DRAW_TO_WINDOW | // Format Must Support Window PFD_DRAW_TO_WINDOW | // Format Must Support Window
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_DOUBLEBUFFER, // Must Support Double Buffering
PFD_TYPE_RGBA, // Request An RGBA Format PFD_TYPE_RGBA, // Request An RGBA Format
16, // Select A 16Bit Color Depth 16, // Select A 16Bit Color Depth
0, 0, 0, 0, 0, 0, // Color Bits Ignored (?) 0, 0, 0, 0, 0, 0, // Color Bits Ignored (?)
0, // No Alpha Buffer 0, // No Alpha Buffer
0, // Shift Bit Ignored (?) 0, // Shift Bit Ignored (?)
0, // No Accumulation Buffer 0, // No Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits Ignored (?) 0, 0, 0, 0, // Accumulation Bits Ignored (?)
16, // 16Bit Z-Buffer (Depth Buffer) 16, // 16Bit Z-Buffer (Depth Buffer)
0, // No Stencil Buffer 0, // No Stencil Buffer
0, // No Auxiliary Buffer (?) 0, // No Auxiliary Buffer (?)
PFD_MAIN_PLANE, // Main Drawing Layer PFD_MAIN_PLANE, // Main Drawing Layer
0, // Reserved (?) 0, // Reserved (?)
0, 0, 0 // Layer Masks Ignored (?) 0, 0, 0 // Layer Masks Ignored (?)
}; };
switch (message) switch (message)
{ {
case WM_CREATE: case WM_CREATE:
LoadSettings();
// Gets A Device Context For The Window // Gets A Device Context For The Window
hDC = GetDC(hWnd); hDC = GetDC(hWnd);
@ -338,7 +335,6 @@ WndProc(HWND hWnd,
break; break;
case WM_DESTROY: case WM_DESTROY:
case WM_CLOSE:
// Disable Fullscreen Mode // Disable Fullscreen Mode
ChangeDisplaySettings(NULL, 0); ChangeDisplaySettings(NULL, 0);
@ -353,9 +349,6 @@ WndProc(HWND hWnd,
// Free The DC // Free The DC
ReleaseDC(hWnd, hDC); ReleaseDC(hWnd, hDC);
// Quit The Program
PostQuitMessage(0);
break; break;
case WM_PAINT: case WM_PAINT:
@ -363,157 +356,48 @@ WndProc(HWND hWnd,
SwapBuffers(hDC); SwapBuffers(hDC);
break; break;
case WM_NOTIFY:
case WM_SYSKEYDOWN:
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_MOUSEMOVE:
// If we've got a parent then we must be a preview
if (GetParent(hWnd) != 0)
return 0;
if (fFirstTime)
{
GetCursorPos(&ptLast);
fFirstTime = FALSE;
}
GetCursorPos(&ptCursor);
// if the mouse has moved more than 3 pixels then exit
if (abs(ptCursor.x - ptLast.x) >= 3 || abs(ptCursor.y - ptLast.y) >= 3)
PostMessage(hWnd, WM_CLOSE, 0, 0);
ptLast = ptCursor;
return 0;
case WM_SIZE: // Resizing The Screen case WM_SIZE: // Resizing The Screen
// Resize To The New Window Size // Resize To The New Window Size
ReSizeGLScene(LOWORD(lParam), HIWORD(lParam)); ReSizeGLScene(LOWORD(lParam), HIWORD(lParam));
break; break;
default: default:
// Pass Windows Messages // Pass Windows Messages to the default screensaver window procedure
return DefWindowProc(hWnd, message, wParam, lParam); return DefScreenSaverProc(hWnd, message, wParam, lParam);
} }
return 0; return 0;
} }
VOID InitSaver(HWND hwndParent)
{
WNDCLASS wc;
ZeroMemory(&wc, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = APPNAME;
RegisterClass(&wc);
if (hwndParent != 0)
{
RECT rect;
GetClientRect(hwndParent, &rect);
CreateWindow(APPNAME, APPNAME,
WS_VISIBLE | WS_CHILD,
0, 0,
rect.right,
rect.bottom,
hwndParent, 0,
hInstance, NULL);
fullscreen = FALSE;
}
else
{
HWND hwnd;
hwnd = CreateWindow(APPNAME, APPNAME,
WS_VISIBLE | WS_POPUP | WS_EX_TOPMOST,
0, 0,
GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
HWND_DESKTOP, 0,
hInstance, NULL);
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ShowCursor(FALSE);
fullscreen = TRUE;
}
}
//
// Look for any options Windows has passed to us:
//
// -a <hwnd> (set password)
// -s (screensave)
// -p <hwnd> (preview)
// -c <hwnd> (configure)
//
VOID ParseCommandLine(LPTSTR szCmdLine, UCHAR *chOption, HWND *hwndParent)
{
TCHAR ch = *szCmdLine++;
if (ch == _T('-') || ch == _T('/'))
ch = *szCmdLine++;
//convert to lower case
if (ch >= _T('A') && ch <= _T('Z'))
ch += _T('a') - _T('A');
*chOption = ch;
ch = *szCmdLine++;
if (ch == _T(':'))
ch = *szCmdLine++;
while (ch == _T(' ') || ch == _T('\t'))
ch = *szCmdLine++;
if (_istdigit(ch))
{
unsigned int i = _ttoi(szCmdLine - 1);
*hwndParent = (HWND)i;
}
else
{
*hwndParent = NULL;
}
}
// //
// Dialogbox procedure for Configuration window // Dialogbox procedure for Configuration window
// //
BOOL CALLBACK ConfigDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) BOOL CALLBACK ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
SetDlgItemText(hwnd, IDC_MESSAGE_TEXT, m_Text); LoadSettings();
SetDlgItemText(hDlg, IDC_MESSAGE_TEXT, m_Text);
return TRUE; return TRUE;
case WM_COMMAND: case WM_COMMAND:
switch (LOWORD(wParam)) switch (LOWORD(wParam))
{ {
case IDOK: case IDOK:
GetDlgItemText(hwnd, IDC_MESSAGE_TEXT, m_Text, MAX_PATH); GetDlgItemText(hDlg, IDC_MESSAGE_TEXT, m_Text, MAX_PATH);
SaveSettings(); SaveSettings();
EndDialog(hwnd, IDOK);
break; /* Fall through */
case IDCANCEL: case IDCANCEL:
EndDialog(hwnd, IDCANCEL); EndDialog(hDlg, IDCANCEL);
break; break;
} }
return FALSE; return FALSE;
case WM_CLOSE: case WM_CLOSE:
EndDialog(hwnd, 0); EndDialog(hDlg, 0);
break; break;
default: default:
@ -523,46 +407,7 @@ BOOL CALLBACK ConfigDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
} }
VOID Configure(VOID) BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{ {
DialogBox(hInstance, MAKEINTRESOURCE(IDD_CONFIG), NULL , (DLGPROC)ConfigDlgProc); return TRUE;
} }
INT CALLBACK
_tWinMain(HINSTANCE hInst,
HINSTANCE hPrev,
LPTSTR lpCmdLine,
INT iCmdShow)
{
HWND hwndParent = 0;
UCHAR chOption;
MSG Message;
hInstance = hInst;
ParseCommandLine(lpCmdLine, &chOption, &hwndParent);
LoadSettings();
switch (chOption)
{
case _T('s'):
InitSaver(0);
break;
case _T('p'):
InitSaver(hwndParent);
break;
case _T('c'):
default:
Configure();
return 0;
}
while (GetMessage(&Message, 0, 0, 0))
DispatchMessage(&Message);
return Message.wParam;
}

View file

@ -0,0 +1,5 @@
NAME 3dtext.scr
EXPORTS
ScreenSaverProc
ScreenSaverConfigureDialog

View file

@ -1,7 +1,8 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
<module name="3dtext" type="win32scr" installbase="system32" installname="3dtext.scr" unicode="true"> <module name="3dtext" type="win32scr" installbase="system32" installname="3dtext.scr" unicode="yes">
<define name="__USE_W32API" /> <importlibrary definition="3dtext.def" />
<library>scrnsave</library>
<library>kernel32</library> <library>kernel32</library>
<library>user32</library> <library>user32</library>
<library>gdi32</library> <library>gdi32</library>

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME| DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME| DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Íàñòðîéêè íà åêðàííèÿ ïðåäïàçèòåë ""Òðèìåðåí òåêñò""." CAPTION "Íàñòðîéêè íà åêðàííèÿ ïðåäïàçèòåë ""Òðèìåðåí òåêñò""."
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "Äîáðå",IDOK,216,7,50,14 DEFPUSHBUTTON "Äîáðå",IDOK,216,7,50,14
PUSHBUTTON "Îòêàç",IDCANCEL,216,24,50,14 PUSHBUTTON "Îòêàç",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Ñîáñòâåí òåêñò",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Ñîáñòâåí òåêñò",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Åêðàíåí ïðåäïàçèòåë ""Òðèìåðåí òåêñò""." IDS_DESCRIPTION "Åêðàíåí ïðåäïàçèòåë ""Òðèìåðåí òåêñò""."
IDS_TITLE "Çà"
IDS_TEXT "Íÿìà íóæäà îò íàñòðîéêè."
END END

View file

@ -1,19 +1,17 @@
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "3D Text Bildschirmschoner Einstellungen" CAPTION "3D-Text Bildschirmschoner-Einstellungen"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Abbrechen",IDCANCEL,216,24,50,14 PUSHBUTTON "Abbrechen",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Eigener Text",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Eigener Text:",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "3D Text Bildschirmschoner" IDS_DESCRIPTION "3D Text Bildschirmschoner"
IDS_TITLE "Über"
IDS_TEXT "Keine Einstellungen nötig."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ñõèìßóåéò ÊåéìÝíïõ 3Ä" CAPTION "Ñõèìßóåéò ÊåéìÝíïõ 3Ä"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "¢êõñï",IDCANCEL,216,24,50,14 PUSHBUTTON "¢êõñï",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Προσαρμοσμένο κείμενο:",IDC_STATIC_TEXT,18,17,65,8 LTEXT "ÐñïóáñìïóìÝíï êåßìåíï:",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Ðñïöýëáîç ïèüíçò ìå êåßìåíï 3Ä" IDS_DESCRIPTION "Ðñïöýëáîç ïèüíçò ìå êåßìåíï 3Ä"
IDS_TITLE "Περί"
IDS_TEXT "Αυτή η προφύλαξη οθόνης δε διαθέτει επιλογές τις οποίες μπορείτε να ορίσετε."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "3D Text Screensaver Settings" CAPTION "3D Text Screensaver Settings"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,216,24,50,14 PUSHBUTTON "Cancel",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Custom text",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Custom text",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "3D Text ScreenSaver" IDS_DESCRIPTION "3D Text ScreenSaver"
IDS_TITLE "About"
IDS_TEXT "No options need to be set."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Configuración del Salvapantallas Texto en 3D" CAPTION "Configuración del Salvapantallas Texto en 3D"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "Aceptar",IDOK,216,7,50,14 DEFPUSHBUTTON "Aceptar",IDOK,216,7,50,14
PUSHBUTTON "Cancelar",IDCANCEL,216,24,50,14 PUSHBUTTON "Cancelar",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Texto personalizado",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Texto personalizado",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Salvapantallas Texto en 3D" IDS_DESCRIPTION "Salvapantallas Texto en 3D"
IDS_TITLE "Acerca de.."
IDS_TEXT "Ninguna opción necesita ser configurada."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Paramètres de l'écran de veille Texte 3D" CAPTION "Paramètres de l'écran de veille Texte 3D"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Annuler",IDCANCEL,216,24,50,14 PUSHBUTTON "Annuler",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Texte personnalisé",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Texte personnalisé",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Écran de veille Texte 3D" IDS_DESCRIPTION "Écran de veille Texte 3D"
IDS_TITLE "À propos de"
IDS_TEXT "Il n'y a aucune option à définir."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Impostazioni del salvaschermo 'Testo 3D'" CAPTION "Impostazioni del salvaschermo 'Testo 3D'"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Annulla",IDCANCEL,216,24,50,14 PUSHBUTTON "Annulla",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Testo personalizzato",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Testo personalizzato",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Salvaschermo 'Testo 3D'" IDS_DESCRIPTION "Salvaschermo 'Testo 3D'"
IDS_TITLE "Informazioni"
IDS_TEXT "Nessuna impostazione da effettuare."
END END

View file

@ -9,7 +9,7 @@
LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 136, 58 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 136, 58
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ekrano uþsklandos nustatymai" CAPTION "Ekrano uþsklandos nustatymai"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -17,12 +17,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,14,38,50,14 DEFPUSHBUTTON "OK",IDOK,14,38,50,14
PUSHBUTTON "Atðaukti",IDCANCEL,72,38,50,14 PUSHBUTTON "Atðaukti",IDCANCEL,72,38,50,14
EDITTEXT IDC_MESSAGE_TEXT,6,18,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,6,18,122,14,ES_AUTOHSCROLL
LTEXT "Pasirinktas tekstas",IDC_STATIC_TEXT,7,7,65,8 LTEXT "Pasirinktas tekstas",IDC_STATIC,7,7,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "3D tekstas" IDS_DESCRIPTION "3D tekstas"
IDS_TITLE "Apie"
IDS_TEXT "Nëra keièiamø parametrø."
END END

View file

@ -7,7 +7,7 @@
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "3D Text Screensaver Settings" CAPTION "3D Text Screensaver Settings"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -15,12 +15,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Anuluj",IDCANCEL,216,24,50,14 PUSHBUTTON "Anuluj",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "W³asny tekst",IDC_STATIC_TEXT,18,17,65,8 LTEXT "W³asny tekst",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Wygaszacz ekranu Tekst 3d" IDS_DESCRIPTION "Wygaszacz ekranu Tekst 3d"
IDS_TITLE "O programie"
IDS_TEXT "Brak opcji."
END END

View file

@ -1,6 +1,6 @@
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ïàðàìåòðû çàñòàâêè" CAPTION "Ïàðàìåòðû çàñòàâêè"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -8,12 +8,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Îòìåíà",IDCANCEL,216,24,50,14 PUSHBUTTON "Îòìåíà",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Другой текст",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Äðóãîé òåêñò",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Çàñòàâêà 3D-òåêñò" IDS_DESCRIPTION "Çàñòàâêà 3D-òåêñò"
IDS_TITLE "О программе"
IDS_TEXT "Эта заставка не имеет настраиваемых параметров."
END END

View file

@ -4,7 +4,7 @@
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nastavenie šetrièa obrazovky 3D text" CAPTION "Nastavenie šetrièa obrazovky 3D text"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -12,12 +12,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Zruši<C5A1>",IDCANCEL,216,24,50,14 PUSHBUTTON "Zruši<C5A1>",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Ľubovoľný text",IDC_STATIC_TEXT,18,17,65,8 LTEXT "¼ubovo¾ný text",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "3D text - šetriè obrazovky" IDS_DESCRIPTION "3D text - šetriè obrazovky"
IDS_TITLE "Čo je ..."
IDS_TEXT "Nie sú potrebné žiadne nastavenia."
END END

View file

@ -8,7 +8,7 @@
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
IDD_CONFIG DIALOGEX 0, 0, 273, 178 DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ïàðàìåòðû çàñòàâêè ""Îá'ºìíèé òåêñò""" CAPTION "Ïàðàìåòðû çàñòàâêè ""Îá'ºìíèé òåêñò"""
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -16,12 +16,10 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14 DEFPUSHBUTTON "OK",IDOK,216,7,50,14
PUSHBUTTON "Ñêàñóâàòè",IDCANCEL,216,24,50,14 PUSHBUTTON "Ñêàñóâàòè",IDCANCEL,216,24,50,14
EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
LTEXT "Текст",IDC_STATIC_TEXT,18,17,65,8 LTEXT "Òåêñò",IDC_STATIC,18,17,65,8
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Çàñòàâêà ""Îá'ºìíèé òåêñò""" IDS_DESCRIPTION "Çàñòàâêà ""Îá'ºìíèé òåêñò"""
IDS_TITLE "Про"
IDS_TEXT "Ця заставка не має налаштовуваних параметрів."
END END

View file

@ -1,23 +1,2 @@
//{{NO_DEPENDENCIES}} #define IDC_STATIC -1
// Microsoft Visual C++ generated include file. #define IDC_MESSAGE_TEXT 1001
// Used by en-US.rc
//
#define IDD_CONFIG 9
#define IDD_DIALOG1 101
#define IDC_MESSAGE_TEXT 1001
#define IDC_STATIC_TEXT 1002
#define IDS_DESCRIPTION 1
#define IDS_TITLE 2
#define IDS_TEXT 3
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -1,13 +1,13 @@
#include <windows.h> #include <windows.h>
#include <scrnsave.h>
#include "resource.h" #include "resource.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#define REACTOS_VERSION_DLL #define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "OpenGL 3DText ScreenSaver\0" #define REACTOS_STR_FILE_DESCRIPTION "OpenGL 3DText ScreenSaver\0"
#define REACTOS_STR_INTERNAL_NAME "ss3dtext\0" #define REACTOS_STR_INTERNAL_NAME "3dtext\0"
#define REACTOS_STR_ORIGINAL_FILENAME "ss3dtext.scr\0" #define REACTOS_STR_ORIGINAL_FILENAME "3dtext.scr\0"
#include <reactos/version.rc> #include <reactos/version.rc>
#include "lang/bg-BG.rc" #include "lang/bg-BG.rc"
@ -19,6 +19,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "lang/it-IT.rc" #include "lang/it-IT.rc"
#include "lang/lt-LT.rc" #include "lang/lt-LT.rc"
#include "lang/pl-PL.rc" #include "lang/pl-PL.rc"
#include "lang/ru-RU.rc"
#include "lang/sk-SK.rc" #include "lang/sk-SK.rc"
#include "lang/uk-UA.rc" #include "lang/uk-UA.rc"
#include "lang/ru-RU.rc"

View file

@ -1,78 +1,70 @@
/* /*
Screen saver library by Anders Norlander <anorland@hem2.passagen.se> * PROJECT: ReactOS Screen Saver Library
* LICENSE: GPL v2 or any later version
This library is (hopefully) compatible with Microsoft's * FILE: include/psdk/scrnsave.h
screen saver library. * PURPOSE: Header file for the library
* PROGRAMMERS: Anders Norlander <anorland@hem2.passagen.se>
This is public domain software. * Colin Finck <mail@colinfinck.de>
*/ */
#ifndef _SCRNSAVE_H #ifndef _SCRNSAVE_H
#define _SCRNSAVE_H #define _SCRNSAVE_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* configure dialog identifier */ #define idsIsPassword 1000
#define DLG_SCRNSAVECONFIGURE 2003 #define idsIniFile 1001
#define idsScreenSaver 1002
#define idsPassword 1003
#define idsDifferentPW 1004
#define idsChangePW 1005
#define idsBadOldPW 1006
#define idsAppName 1007
#define idsNoHelpMemory 1008
#define idsHelpFile 1009
#define idsDefKeyword 1010
#define idsIsPassword 1000 // If you add a configuration dialog for your screen saver, it must have this dialog ID.
#define idsIniFile 1001 #define DLG_SCRNSAVECONFIGURE 2003
#define idsScreenSaver 1002
#define idsPassword 1003
#define idsDifferentPW 1004
#define idsChangePW 1005
#define idsBadOldPW 1006
#define idsAppName 1007
#define idsNoHelpMemory 1008
#define idsHelpFile 1009
#define idsDefKeyword 1010
#define IDS_DESCRIPTION 1 #define IDS_DESCRIPTION 1
#define ID_APP 100 #define ID_APP 100
#define WS_GT (WS_GROUP | WS_TABSTOP) #define WS_GT (WS_GROUP | WS_TABSTOP)
#define SCRM_VERIFYPW WM_APP #define MAXFILELEN 13
#define MAXFILELEN 13 #define TITLEBARNAMELEN 40
#define TITLEBARNAMELEN 40 #define APPNAMEBUFFERLEN 40
#define APPNAMEBUFFERLEN 40 #define BUFFLEN 255
#define BUFFLEN 255
#ifndef RC_INVOKED // The dialog procedure of the screen saver configure dialog (if any)
// If you don't have a configuration dialog, just implement a procedure that always returns FALSE.
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
/* functions provided by the aothor of the screen saver */ // Use this function if you want to register special classes before opening the configuration dialog.
BOOL WINAPI ScreenSaverConfigureDialog(HWND,UINT,WPARAM,LPARAM); // Return TRUE here if the classes were registered successfully and the configuration dialog shall be opened.
BOOL WINAPI RegisterDialogClasses(HANDLE); // If you return FALSE, no configuration dialog will be opened.
LONG WINAPI ScreenSaverProc(HWND,UINT,WPARAM,LPARAM); BOOL WINAPI RegisterDialogClasses(HANDLE hInst);
/* Change name of function if we are using UNICODE */ // The screen saver window procedure
#ifdef UNICODE LRESULT WINAPI ScreenSaverProc(HWND, UINT uMsg, WPARAM wParam, LPARAM lParam);
#define DefScreenSaverProc DefScreenSaverProcW
#endif
/* default screen saver proc; call instead of DefWindowProc */ // The window procedure, which handles default tasks for screen savers.
LONG WINAPI DefScreenSaverProc(HWND,UINT,WPARAM,LPARAM); // Use this instead of DefWindowProc.
LRESULT WINAPI DefScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
/* change password */ // These globals are defined in the screen saver library.
void WINAPI ScreenSaverChangePassword(HWND); extern HINSTANCE hMainInstance;
extern HWND hMainWindow;
/* globals that may be used by screen saver */ extern BOOL fChildPreview;
extern HINSTANCE hMainInstance; extern TCHAR szName[];
extern HWND hMainWindow; extern TCHAR szAppName[];
extern BOOL fChildPreview; extern TCHAR szIniFile[];
extern TCHAR szName[]; extern TCHAR szScreenSaver[];
extern TCHAR szAppName[]; extern TCHAR szHelpFile[];
extern TCHAR szIniFile[]; extern TCHAR szNoHelpMemory[];
extern TCHAR szScreenSaver[]; extern UINT MyHelpMessage;
extern TCHAR szHelpFile[];
extern TCHAR szNoHelpMemory[];
extern UINT MyHelpMessage;
#endif /* RC_INVOKED */
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -1,21 +1,20 @@
/* /*
Screen saver library by Anders Norlander <anorland@hem2.passagen.se> * PROJECT: ReactOS Screen Saver Library
* LICENSE: GPL v2 or any later version
This library is (hopefully) compatible with Microsoft's * FILE: lib/sdk/scrnsave/scrnsave.c
screen saver library. * PURPOSE: Library for writing screen savers, compatible with MS' scrnsave.lib
* PROGRAMMERS: Anders Norlander <anorland@hem2.passagen.se>
This is public domain software. * Colin Finck <mail@colinfinck.de>
*/ */
#include <windows.h> #include <windows.h>
#include <tchar.h>
#include <scrnsave.h> #include <scrnsave.h>
#include <regstr.h>
/* screen saver window class */ // Screen Saver window class
#define CLASS_SCRNSAVE TEXT("WindowsScreenSaverClass") #define CLASS_SCRNSAVE TEXT("WindowsScreenSaverClass")
/* globals */ // Globals
HWND hMainWindow = NULL; HWND hMainWindow = NULL;
BOOL fChildPreview = FALSE; BOOL fChildPreview = FALSE;
HINSTANCE hMainInstance; HINSTANCE hMainInstance;
@ -27,45 +26,21 @@ TCHAR szHelpFile[MAXFILELEN];
TCHAR szNoHelpMemory[BUFFLEN]; TCHAR szNoHelpMemory[BUFFLEN];
UINT MyHelpMessage; UINT MyHelpMessage;
/* local house keeping */ // Local house keeping
static HINSTANCE hPwdLib = NULL;
static POINT pt_orig; static POINT pt_orig;
static BOOL checking_pwd = FALSE;
static BOOL closing = FALSE;
static BOOL w95 = FALSE;
typedef BOOL (WINAPI *VERIFYPWDPROC)(HWND); static int ISSPACE(TCHAR c)
typedef DWORD (WINAPI *CHPWDPROC)(LPCTSTR, HWND, DWORD, PVOID);
static VERIFYPWDPROC VerifyScreenSavePwd = NULL;
/* function names */
#define szVerifyPassword "VerifyScreenSavePwd"
#ifdef UNICODE
#define szPwdChangePassword "PwdChangePasswordW"
#else
#define szPwdChangePassword "PwdChangePasswordA"
#endif
static void TerminateScreenSaver(HWND hWnd);
static BOOL RegisterClasses(void);
static LRESULT WINAPI SysScreenSaverProc(HWND,UINT,WPARAM,LPARAM);
static int LaunchScreenSaver(HWND hParent);
static void LaunchConfig(void);
static int ISSPACE(char c)
{ {
return (c == ' ' || c == '\t'); return (c == ' ' || c == '\t');
} }
#define ISNUM(c) ((c) >= '0' && c <= '9') #define ISNUM(c) ((c) >= '0' && c <= '9')
static unsigned long static unsigned long _toul(const TCHAR *s)
_toul(const char *s)
{ {
unsigned long res; unsigned long res;
unsigned long n; unsigned long n;
const char *p; const TCHAR *p;
for (p = s; *p; p++) for (p = s; *p; p++)
if (!ISNUM(*p)) if (!ISNUM(*p))
@ -80,138 +55,117 @@ _toul(const char *s)
return res; return res;
} }
/* screen saver entry point */ // This function takes care of *must* do tasks, like terminating screen saver
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, static LRESULT WINAPI SysScreenSaverProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LPSTR CmdLine, int nCmdShow)
{ {
LPSTR p; switch(uMsg)
OSVERSIONINFO vi;
/* initialize */
hMainInstance = hInst;
vi.dwOSVersionInfoSize = sizeof(vi);
GetVersionEx(&vi);
/* check if we are going to check for passwords */
if (vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{ {
HKEY hKey; case WM_CREATE:
/* we are using windows 95 */ // Mouse is not supposed to move from this position
w95 = TRUE; GetCursorPos(&pt_orig);
if (RegOpenKey(HKEY_CURRENT_USER, REGSTR_PATH_SCREENSAVE ,&hKey) == break;
ERROR_SUCCESS)
{
DWORD check_pwd;
DWORD size = sizeof(DWORD);
DWORD type;
LONG res;
res = RegQueryValueEx(hKey, REGSTR_VALUE_USESCRPASSWORD, case WM_DESTROY:
NULL, &type, (PBYTE) &check_pwd, &size); PostQuitMessage(0);
break;
if (check_pwd && res == ERROR_SUCCESS) case WM_SYSCOMMAND:
if (!fChildPreview)
{ {
hPwdLib = LoadLibrary(TEXT("PASSWORD.CPL")); switch (wParam)
if (hPwdLib) {
VerifyScreenSavePwd = GetProcAddress(hPwdLib, szVerifyPassword); case SC_CLOSE:
case SC_SCREENSAVE:
return FALSE;
}
} }
break;
RegCloseKey(hKey);
}
} }
/* parse arguments */ return ScreenSaverProc(hWnd, uMsg, wParam, lParam);
for (p = CmdLine; *p; p++) }
LRESULT WINAPI DefScreenSaverProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// Don't do any special processing when in preview mode
if (fChildPreview)
return DefWindowProc(hWnd, uMsg, wParam, lParam);
switch (uMsg)
{ {
switch (*p) case WM_NCACTIVATE:
case WM_ACTIVATE:
case WM_ACTIVATEAPP:
if (!wParam)
{
// wParam is FALSE, so the screensaver is losing the focus.
PostMessage(hWnd, WM_CLOSE, 0, 0);
}
break;
case WM_MOUSEMOVE:
{ {
case 'S': POINT pt;
case 's': GetCursorPos(&pt);
/* start screen saver */ if (pt.x == pt_orig.x && pt.y == pt_orig.y)
return LaunchScreenSaver(NULL);
case 'P':
case 'p':
{
/* start screen saver in preview window */
HWND hParent;
fChildPreview = TRUE;
while (ISSPACE(*++p));
hParent = (HWND) _toul(p);
if (hParent && IsWindow(hParent))
return LaunchScreenSaver(hParent);
}
return 0;
case 'C':
case 'c':
/* display configure dialog */
LaunchConfig();
return 0;
case 'A':
case 'a':
{
/* change screen saver password */
HWND hParent;
while (ISSPACE(*++p));
hParent = (HWND) _toul(p);
if (!hParent || !IsWindow(hParent))
hParent = GetForegroundWindow();
ScreenSaverChangePassword(hParent);
}
return 0;
case '-':
case '/':
case ' ':
default:
break; break;
// Fall through
} }
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_KEYDOWN:
case WM_KEYUP:
// Send a WM_CLOSE to close the screen saver (allows the screensaver author to do clean-up tasks)
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
case WM_SETCURSOR:
SetCursor(NULL);
return TRUE;
} }
LaunchConfig(); return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0; // Registers the screen saver window class
static BOOL RegisterScreenSaverClass(void)
{
WNDCLASS cls = {0,};
cls.hIcon = LoadIcon(hMainInstance, MAKEINTATOM(ID_APP));
cls.lpszClassName = CLASS_SCRNSAVE;
cls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
cls.hInstance = hMainInstance;
cls.style = CS_VREDRAW | CS_HREDRAW | CS_SAVEBITS | CS_PARENTDC;
cls.lpfnWndProc = (WNDPROC)SysScreenSaverProc;
return RegisterClass(&cls) != 0;
} }
static void LaunchConfig(void) static void LaunchConfig(void)
{ {
/* FIXME: should this be called */ // Only show the dialog if the RegisterDialogClasses function succeeded.
RegisterDialogClasses(hMainInstance); // This is the same behaviour as MS' scrnsave.lib.
if( RegisterDialogClasses(hMainInstance) )
/* display configure dialog */ DialogBox(hMainInstance, MAKEINTRESOURCE(DLG_SCRNSAVECONFIGURE), GetForegroundWindow(), (DLGPROC) ScreenSaverConfigureDialog);
DialogBox(hMainInstance, MAKEINTRESOURCE(DLG_SCRNSAVECONFIGURE),
GetForegroundWindow(), (DLGPROC) ScreenSaverConfigureDialog);
} }
static int LaunchScreenSaver(HWND hParent) static int LaunchScreenSaver(HWND hParent)
{ {
BOOL foo;
UINT style; UINT style;
RECT rc; RECT rc;
MSG msg; MSG msg;
/* don't allow other tasks to get into the foreground */ if (!RegisterScreenSaverClass())
if (w95 && !fChildPreview)
SystemParametersInfo(SPI_SCREENSAVERRUNNING, TRUE, &foo, 0);
msg.wParam = 0;
/* register classes, both user defined and classes used by screen saver
library */
if (!RegisterClasses())
{ {
MessageBox(NULL, TEXT("RegisterClasses() failed"), NULL, MB_ICONHAND); MessageBox(NULL, TEXT("RegisterClass() failed"), NULL, MB_ICONHAND);
goto restore; return 1;
} }
/* a slightly different approach needs to be used when displaying // A slightly different approach needs to be used when displaying in a preview window
in a preview window */
if (hParent) if (hParent)
{ {
style = WS_CHILD; style = WS_CHILD;
@ -225,213 +179,71 @@ static int LaunchScreenSaver(HWND hParent)
style |= WS_VISIBLE; style |= WS_VISIBLE;
} }
/* create main screen saver window */ // Create the main screen saver window
hMainWindow = CreateWindowEx(hParent ? 0 : WS_EX_TOPMOST, CLASS_SCRNSAVE, hMainWindow = CreateWindowEx(hParent ? 0 : WS_EX_TOPMOST, CLASS_SCRNSAVE,
TEXT("SCREENSAVER"), style, TEXT("SCREENSAVER"), style,
0, 0, rc.right, rc.bottom, hParent, NULL, 0, 0, rc.right, rc.bottom, hParent, NULL,
hMainInstance, NULL); hMainInstance, NULL);
/* display window and start pumping messages */ // Display window and start pumping messages
if (hMainWindow) if (hMainWindow)
{ {
UpdateWindow(hMainWindow);
ShowWindow(hMainWindow, SW_SHOW); ShowWindow(hMainWindow, SW_SHOW);
while (GetMessage(&msg, NULL, 0, 0) == TRUE) while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg); DispatchMessage(&msg);
}
} }
restore:
/* restore system */
if (w95 && !fChildPreview)
SystemParametersInfo(SPI_SCREENSAVERRUNNING, FALSE, &foo, 0);
FreeLibrary(hPwdLib);
return msg.wParam; return msg.wParam;
} }
/* this function takes care of *must* do tasks, like terminating // Screen Saver entry point
screen saver */ int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR CmdLine, int nCmdShow)
static LRESULT WINAPI SysScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
switch (msg) LPTSTR p;
hMainInstance = hInst;
// Parse the arguments
for (p = CmdLine; *p; p++)
{ {
case WM_CREATE: switch (*p)
if (!fChildPreview) {
SetCursor(NULL); case 'S':
/* mouse is not supposed to move from this position */ case 's':
GetCursorPos(&pt_orig); // Start the screen saver
break; return LaunchScreenSaver(NULL);
case WM_DESTROY: case 'P':
PostQuitMessage(0); case 'p':
break;
case WM_TIMER:
if (closing)
return 0;
break;
case WM_PAINT:
if (closing)
return DefWindowProc(hWnd, msg, wParam, lParam);
break;
case WM_SYSCOMMAND:
if (!fChildPreview)
{ {
switch (wParam) // Start the screen saver in preview mode
{ HWND hParent;
case SC_CLOSE: fChildPreview = TRUE;
case SC_SCREENSAVE:
case SC_NEXTWINDOW: while (ISSPACE(*++p));
case SC_PREVWINDOW: hParent = (HWND) _toul(p);
return FALSE;
} if (hParent && IsWindow(hParent))
return LaunchScreenSaver(hParent);
} }
break;
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_NCACTIVATE:
case WM_ACTIVATE:
case WM_ACTIVATEAPP:
if (closing)
return DefWindowProc(hWnd, msg, wParam, lParam);
break;
}
return ScreenSaverProc(hWnd, msg, wParam, lParam);
}
LONG WINAPI DefScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
/* don't do any special processing when in preview mode */
if (fChildPreview || closing)
return DefWindowProc(hWnd, msg, wParam, lParam);
switch (msg)
{
case WM_CLOSE:
TerminateScreenSaver(hWnd);
/* do NOT pass this to DefWindowProc; it will terminate even if
an invalid password was given.
*/
return 0; return 0;
case SCRM_VERIFYPW: case 'C':
/* verify password or return TRUE if password checking is turned off */ case 'c':
if (VerifyScreenSavePwd) // Display the configuration dialog
return VerifyScreenSavePwd(hWnd); LaunchConfig();
else return 0;
return TRUE;
case WM_SETCURSOR: case '-':
if (checking_pwd) case '/':
break; case ' ':
SetCursor(NULL); default:
return TRUE;
case WM_NCACTIVATE:
case WM_ACTIVATE:
case WM_ACTIVATEAPP:
if (wParam != FALSE)
break;
case WM_MOUSEMOVE:
{
POINT pt;
GetCursorPos(&pt);
if (pt.x == pt_orig.x && pt.y == pt_orig.y)
break; break;
} }
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
/* try to terminate screen saver */
if (!checking_pwd)
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
} }
return DefWindowProc(hWnd, msg, wParam, lParam); LaunchConfig();
}
return 0;
static void TerminateScreenSaver(HWND hWnd)
{
/* don't allow recursion */
if (checking_pwd || closing)
return;
/* verify password */
if (VerifyScreenSavePwd)
{
checking_pwd = TRUE;
closing = SendMessage(hWnd, SCRM_VERIFYPW, 0, 0);
checking_pwd = FALSE;
}
else
closing = TRUE;
/* are we closing? */
if (closing)
{
DestroyWindow(hWnd);
}
else
GetCursorPos(&pt_orig); /* if not: get new mouse position */
}
/*
Register screen saver window class and call user
supplied hook.
*/
static BOOL RegisterClasses(void)
{
WNDCLASS cls;
ZeroMemory(&cls, sizeof(cls));
cls.hCursor = NULL;
cls.hIcon = LoadIcon(hMainInstance, MAKEINTATOM(ID_APP));
cls.lpszMenuName = NULL;
cls.lpszClassName = CLASS_SCRNSAVE;
cls.hbrBackground = NULL; //(HBRUSH)GetStockObject(BLACK_BRUSH);
cls.hInstance = hMainInstance;
cls.style = CS_VREDRAW | CS_HREDRAW | CS_SAVEBITS | CS_PARENTDC;
cls.lpfnWndProc = (WNDPROC) SysScreenSaverProc;
cls.cbWndExtra = 0;
cls.cbClsExtra = 0;
if (!RegisterClass(&cls))
return FALSE;
return RegisterDialogClasses(hMainInstance);
}
void WINAPI ScreenSaverChangePassword(HWND hParent)
{
/* load Master Password Router (MPR) */
HINSTANCE hMpr = LoadLibrary(TEXT("MPR.DLL"));
if (hMpr)
{
CHPWDPROC ChangePassword;
ChangePassword = (CHPWDPROC) GetProcAddress(hMpr, szPwdChangePassword);
/* change password for screen saver provider */
if (ChangePassword)
ChangePassword(TEXT("SCRSAVE"), hParent, 0, NULL);
FreeLibrary(hMpr);
}
} }

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd">
<group> <group>
<module name="scrnsave" type="staticlibrary"> <module name="scrnsave" type="staticlibrary" unicode="yes">
<file>scrnsave.c</file> <file>scrnsave.c</file>
</module> </module>
</group> </group>

View file

@ -1,15 +1,11 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
<module name="blankscr" type="win32scr" installbase="system32" installname="scrnsave.scr"> <module name="blankscr" type="win32scr" installbase="system32" installname="scrnsave.scr" unicode="yes">
<importlibrary definition="scrnsave.def" /> <importlibrary definition="scrnsave.def" />
<library>scrnsave</library> <library>scrnsave</library>
<library>kernel32</library> <library>kernel32</library>
<library>user32</library> <library>user32</library>
<library>gdi32</library> <library>gdi32</library>
<library>opengl32</library>
<library>glu32</library>
<library>advapi32</library>
<library>shell32</library>
<file>scrnsave.c</file> <file>scrnsave.c</file>
<file>scrnsave.rc</file> <file>scrnsave.rc</file>

View file

@ -3,6 +3,5 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Blank" IDS_DESCRIPTION "Blank"
IDS_TITLE "Çà"
IDS_TEXT "Íÿìà âúçìîæíîñò çà íàñòðîéêè." IDS_TEXT "Íÿìà âúçìîæíîñò çà íàñòðîéêè."
END END

View file

@ -2,7 +2,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Blank" IDS_DESCRIPTION "Schwarzer Bildschirm"
IDS_TITLE "Über"
IDS_TEXT "Keinerlei Einstellungen notwendig." IDS_TEXT "Keinerlei Einstellungen notwendig."
END END

View file

@ -2,7 +2,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Blank" IDS_DESCRIPTION "Blank screen"
IDS_TITLE "About"
IDS_TEXT "No options need to be set." IDS_TEXT "No options need to be set."
END END

View file

@ -3,6 +3,5 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "En blanco" IDS_DESCRIPTION "En blanco"
IDS_TITLE "Acerca de"
IDS_TEXT "Ninguna opción necesita ser configurada." IDS_TEXT "Ninguna opción necesita ser configurada."
END END

View file

@ -3,6 +3,5 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Vide" IDS_DESCRIPTION "Vide"
IDS_TITLE "À propos de"
IDS_TEXT "Il n'y a aucune option à définir." IDS_TEXT "Il n'y a aucune option à définir."
END END

View file

@ -12,6 +12,5 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Tuðèias" IDS_DESCRIPTION "Tuðèias"
IDS_TITLE "Apie"
IDS_TEXT "Nëra keièiamø parametrø." IDS_TEXT "Nëra keièiamø parametrø."
END END

View file

@ -3,6 +3,5 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Blank" IDS_DESCRIPTION "Blank"
IDS_TITLE "Informatie"
IDS_TEXT "Geen dingen om in te stellen." IDS_TEXT "Geen dingen om in te stellen."
END END

View file

@ -10,6 +10,5 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Puste" IDS_DESCRIPTION "Puste"
IDS_TITLE "O programie"
IDS_TEXT "Brak opcji do ustawiania." IDS_TEXT "Brak opcji do ustawiania."
END END

View file

@ -7,6 +7,5 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Blank" IDS_DESCRIPTION "Blank"
IDS_TITLE "Čo je ..."
IDS_TEXT "Nie sú potrebné žiadne nastavenia." IDS_TEXT "Nie sú potrebné žiadne nastavenia."
END END

View file

@ -11,6 +11,5 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_DESCRIPTION "Ïîðîæíüî" IDS_DESCRIPTION "Ïîðîæíüî"
IDS_TITLE "Ïðî"
IDS_TEXT "Öÿ çàñòàâêà íå ìຠíàëàøòîâóâàíèõ ïàðàìåòð³â." IDS_TEXT "Öÿ çàñòàâêà íå ìຠíàëàøòîâóâàíèõ ïàðàìåòð³â."
END END

View file

@ -1,4 +1 @@
#define IDS_DESCRIPTION 1
#define IDS_TITLE 2
#define IDS_TEXT 3 #define IDS_TEXT 3

View file

@ -21,38 +21,27 @@
#include <scrnsave.h> #include <scrnsave.h>
#include "resource.h" #include "resource.h"
LRESULT WINAPI ScreenSaverProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) LRESULT WINAPI ScreenSaverProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
static HDC hdc; return DefScreenSaverProc(hwnd, uMsg, wParam, lParam);
static RECT rc;
switch(message)
{
case WM_CREATE:
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_ERASEBKGND:
hdc = GetDC(hwnd);
GetClientRect (hwnd, &rc);
FillRect (hdc, &rc, GetStockObject(BLACK_BRUSH));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
break;
default:
return DefScreenSaverProc(hwnd, message, wParam, lParam);
}
return 0;
} }
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
return FALSE; return FALSE;
} }
// This function is only called one time before opening the configuration dialog.
// Use it to show a message that no configuration is necesssary and return FALSE to indicate that no configuration dialog shall be opened.
BOOL WINAPI RegisterDialogClasses(HANDLE hInst) BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{ {
return TRUE; TCHAR szMessage[256];
TCHAR szTitle[25];
LoadString(hInst, IDS_TEXT, szMessage, sizeof(szMessage) / sizeof(TCHAR));
LoadString(hInst, IDS_DESCRIPTION, szTitle, sizeof(szTitle) / sizeof(TCHAR));
MessageBox(NULL, szMessage, szTitle, MB_OK | MB_ICONEXCLAMATION);
return FALSE;
} }

View file

@ -1,7 +1,5 @@
NAME blankscr.SCR NAME blankscr.SCR
DESCRIPTION 'Blank screen saver'
EXPORTS EXPORTS
ScreenSaverProc ScreenSaverProc
ScreenSaverConfigureDialog ScreenSaverConfigureDialog

View file

@ -1,4 +1,5 @@
#include <windows.h> #include <windows.h>
#include <scrnsave.h>
#include "resource.h" #include "resource.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
@ -7,7 +8,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Default ScreenSaver\0" #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Default ScreenSaver\0"
#define REACTOS_STR_INTERNAL_NAME "scrnsave\0" #define REACTOS_STR_INTERNAL_NAME "scrnsave\0"
#define REACTOS_STR_ORIGINAL_FILENAME "scrnsave.scr\0" #define REACTOS_STR_ORIGINAL_FILENAME "scrnsave.scr\0"
#include <reactos/version.rc> #include <reactos/version.rc>
#include "lang/bg-BG.rc" #include "lang/bg-BG.rc"