Author: mpiulachs
Date: Sat Oct 27 02:34:42 2007
New Revision: 29904
URL: 
http://svn.reactos.org/svn/reactos?rev=29904&view=rev
Log:
Very simple OpenGL 3D text screensaver similar to the windows one.
Original work by Jeff Molofee tutorials (
http://nehe.gamedev.net)
basically converted from C++ to C and adapted as a windows screensaver
Not added to reactos.dff for now because opengl seems to be broken again
See issue #2755 for more details.
Added:
    trunk/reactos/base/applications/screensavers/3dtext/
    trunk/reactos/base/applications/screensavers/3dtext/3dtext.c   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/3dtext.h   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/3dtext.rbuild   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/lang/
    trunk/reactos/base/applications/screensavers/3dtext/lang/en-US.rc   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/resource.h   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/rsrc.rc   (with props)
    trunk/reactos/base/applications/screensavers/3dtext/settings.c   (with props)
Added: trunk/reactos/base/applications/screensavers/3dtext/3dtext.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/3dtext.c (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/3dtext.c Sat Oct 27 02:34:42 2007
@@ -1,0 +1,426 @@
+/*
+ *  Copyright 2000 Jeff Molofee 
http://nehe.gamedev.net/ (Original code)
+ *  Copyright 2006 Eric Kohl
+ *  Copyright 2007 Marc Piulachs (marc.piulachs(a)codexchange.net) - minor modifications ,
converted to screensaver
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <windows.h>     // Header File For Windows
+#include <math.h>                // Header File For Windows Math Library
+#include <gl\gl.h>               // Header File For The OpenGL32 Library
+#include <gl\glu.h>              // Header File For The GLu32 Library
+#include <tchar.h>
+
+#include "resource.h"
+#include "3dtext.h"
+
+static HGLRC hRC;              // Permanent Rendering Context
+static HDC hDC;                // Private GDI Device Context
+
+GLuint base;                   // Base Display List For The Font Set
+GLfloat        rot;                    // Used To Rotate The Text
+
+#define APPNAME _T("3DText")
+
+HINSTANCE hInstance;
+BOOL fullscreen = FALSE;
+
+GLvoid BuildFont(GLvoid)                                                               //
Build Our Bitmap Font
+{
+       GLYPHMETRICSFLOAT       gmf[256];                                               //
Address Buffer For Font Storage
+       HFONT   font;
// Windows Font ID
+
+       base = glGenLists(256);                                                         //
Storage For 256 Characters
+
+       font = CreateFont(      -12,                                                    //
Height Of Font
+                                               0,
// Width Of Font
+                                               0,
// Angle Of Escapement
+                                               0,
// Orientation Angle
+                                               FW_BOLD,
// Font Weight
+                                               FALSE,
// Italic
+                                               FALSE,
// Underline
+                                               FALSE,
// Strikeout
+                                               ANSI_CHARSET,
// Character Set Identifier
+                                               OUT_TT_PRECIS,
// Output Precision
+                                               CLIP_DEFAULT_PRECIS,                    //
Clipping Precision
+                                               ANTIALIASED_QUALITY,                    //
Output Quality
+                                               FF_DONTCARE|DEFAULT_PITCH,              //
Family And Pitch
+                                               "Tahoma");
// Font Name
+
+       SelectObject(hDC, font);                                                        //
Selects The Font We Created
+
+       wglUseFontOutlines(     hDC,                                                    //
Select The Current DC
+                                               0,
// Starting Character
+                                               255,
// Number Of Display Lists To Build
+                                               base,
// Starting Display Lists
+                                               0.0f,
// Deviation From The True Outlines
+                                               0.2f,
// Font Thickness In The Z Direction
+                                               WGL_FONT_POLYGONS,
// Use Polygons, Not Lines
+                                               gmf);
// Address Of Buffer To Recieve Data
+}
+
+GLvoid KillFont(GLvoid)
// Delete The Font
+{
+  glDeleteLists(base, 256);                                                            //
Delete All 256 Characters
+}
+
+GLvoid glPrint(char *text)                                                             //
Custom GL "Print" Routine
+{
+  if (text == NULL)
// If There's No Text
+    return;
// Do Nothing
+
+  glPushAttrib(GL_LIST_BIT);                                                   // Pushes
The Display List Bits
+  glListBase(base);
// Sets The Base Character to 32
+  glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);   // Draws The Display List Text
+  glPopAttrib();
// Pops The Display List Bits
+}
+
+GLvoid InitGL(GLsizei Width, GLsizei Height)   // Will Be Called Right After The GL
Window Is Created
+{
+       glClearColor(0.0f, 0.0f, 0.0f, 0.0f);           // Clear The Background Color To
Black
+       glClearDepth(1.0);                                                      // Enables
Clearing Of The Depth Buffer
+       glDepthFunc(GL_LESS);                                           // The Type Of
Depth Test To Do
+       glEnable(GL_DEPTH_TEST);                                        // Enables Depth
Testing
+       glShadeModel(GL_SMOOTH);                                        // Enables Smooth
Color Shading
+
+       glMatrixMode(GL_PROJECTION);                            // Select The Projection
Matrix
+       glLoadIdentity();                                                       // Reset
The Projection Matrix
+
+       // Calculate The Aspect Ratio Of The Window
+       gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
+
+       glMatrixMode(GL_MODELVIEW);                                     // Select The
Modelview Matrix
+
+       BuildFont();                                                            // Build
The Font
+       glEnable(GL_LIGHT0);                                            // Enable Default
Light (Quick And Dirty)
+       glEnable(GL_LIGHTING);                                          // Enable Lighting
+       glEnable(GL_COLOR_MATERIAL);                            // Enable Coloring Of
Material
+}
+
+GLvoid ReSizeGLScene(GLsizei Width, GLsizei Height)    // Handles Window Resizing
+{
+       if (Height==0)                                                                  //
Is Window Too Small (Divide By Zero Error)
+               Height=1;
// If So Make It One Pixel Tall
+
+       // Reset The Current Viewport And Perspective Transformation
+       glViewport(0, 0, Width, Height);
+
+       glMatrixMode(GL_PROJECTION);                                    // Select The
Projection Matrix
+       glLoadIdentity();                                                               //
Reset The Projection Matrix
+
+       // Calculate The Aspect Ratio Of The Window
+       gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
+       glMatrixMode(GL_MODELVIEW);                                             // Select
The Modelview Matrix
+}
+
+GLvoid DrawGLScene(GLvoid)
// Handles Rendering
+{
+       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);             // Clear The
Screen And The Depth Buffer
+       glLoadIdentity();
// Reset The View
+       glTranslatef(0.0f,0.0f,-10.0f);                                                 //
Move One Unit Into The Screen
+       glRotatef(rot,1.0f,0.0f,0.0f);                                                  //
Rotate On The X Axis
+       glRotatef(rot*1.2f,0.0f,1.0f,0.0f);                                             //
Rotate On The Y Axis
+       glRotatef(rot*1.4f,0.0f,0.0f,1.0f);                                             //
Rotate On The Z Axis
+       glTranslatef(-3.5f,0.0f,0.0f);                                                  //
Move To The Left Before Drawing
+       // Pulsing Colors Based On The Rotation
+       glColor3f(
+               (1.0f*(cos(rot/20.0f))),
+               (1.0f*(sin(rot/25.0f))),
+               (1.0f-0.5f*(cos(rot/17.0f))));
+       glPrint(m_Text);                                                        // Print
GL Text To The Screen
+       glColor3f(0.0f,0.0f,1.0f);
// Make The Text Blue
+       rot+=0.1f;
// Increase The Rotation Variable
+}
+
+LRESULT CALLBACK WndProc(      HWND    hWnd,
+                                                       UINT    message,
+                                                       WPARAM  wParam,
+                                                       LPARAM  lParam)
+{
+       static POINT ptLast;
+       static POINT ptCursor;
+       static BOOL  fFirstTime = TRUE;
+       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
+               1,                                                                      //
Version Number (?)
+               PFD_DRAW_TO_WINDOW |                            // Format Must Support
Window
+               PFD_SUPPORT_OPENGL |                            // Format Must Support
OpenGL
+               PFD_DOUBLEBUFFER,                                       // Must Support
Double Buffering
+               PFD_TYPE_RGBA,                                          // Request An RGBA
Format
+               16,                                                                     //
Select A 16Bit Color Depth
+               0, 0, 0, 0, 0, 0,                                       // Color Bits
Ignored (?)
+               0,                                                                      //
No Alpha Buffer
+               0,                                                                      //
Shift Bit Ignored (?)
+               0,                                                                      //
No Accumulation Buffer
+               0, 0, 0, 0,                                                     //
Accumulation Bits Ignored (?)
+               16,                                                                     //
16Bit Z-Buffer (Depth Buffer)
+               0,                                                                      //
No Stencil Buffer
+               0,                                                                      //
No Auxiliary Buffer (?)
+               PFD_MAIN_PLANE,                                         // Main Drawing
Layer
+               0,                                                                      //
Reserved (?)
+               0, 0, 0                                                         // Layer
Masks Ignored (?)
+       };
+
+       switch (message)                                                // Tells Windows
We Want To Check The Message
+       {
+               case WM_CREATE:
// Window Creation
+                       hDC = GetDC(hWnd);
// Gets A Device Context For The Window
+                       PixelFormat = ChoosePixelFormat(hDC, &pfd);         // Finds
The Closest Match To The Pixel Format We Set Above
+
+                       if (!PixelFormat)
// No Matching Pixel Format?
+                       {
+                               MessageBox(0,"Can't Find A Suitable
PixelFormat.","Error",MB_OK|MB_ICONERROR);
+                               PostQuitMessage(0);                     // This Sends A
'Message' Telling The Program To Quit
+                               break;                                          //
Prevents The Rest Of The Code From Running
+                       }
+
+                       if(!SetPixelFormat(hDC,PixelFormat,&pfd))           // Can We
Set The Pixel Mode?
+                       {
+                               MessageBox(0,"Can't Set The
PixelFormat.","Error",MB_OK|MB_ICONERROR);
+                               PostQuitMessage(0);                     // This Sends A
'Message' Telling The Program To Quit
+                               break;                                          //
Prevents The Rest Of The Code From Running
+                       }
+
+                       hRC = wglCreateContext(hDC);                                    //
Grab A Rendering Context
+                       if(!hRC)
// Did We Get One?
+                       {
+                               MessageBox(0,"Can't Create A GL Rendering
Context.","Error",MB_OK|MB_ICONERROR);
+                               PostQuitMessage(0);                     // This Sends A
'Message' Telling The Program To Quit
+                               break;                                          //
Prevents The Rest Of The Code From Running
+                       }
+
+                       if(!wglMakeCurrent(hDC, hRC))                                   //
Can We Make The RC Active?
+                       {
+                               MessageBox(0,"Can't Activate
GLRC.","Error",MB_OK|MB_ICONERROR);
+                               PostQuitMessage(0);                     // This Sends A
'Message' Telling The Program To Quit
+                               break;                                          //
Prevents The Rest Of The Code From Running
+                       }
+
+                       GetClientRect(hWnd, &Screen);
// Grab Screen Info For The Current Window
+                       InitGL(Screen.right, Screen.bottom);                    //
Initialize The GL Screen Using Screen Info
+                       break;
+
+               case WM_DESTROY:
// Windows Being Destroyed
+               case WM_CLOSE:
// Windows Being Closed
+                       {
+                               ChangeDisplaySettings(NULL, 0);
// Disable Fullscreen Mode
+                               KillFont();
// Deletes The Font Display List
+
+                               wglMakeCurrent(hDC,NULL);
// Make The DC Current
+                               wglDeleteContext(hRC);
// Kill The RC
+                               ReleaseDC(hWnd,hDC);
// Free The DC
+
+                               PostQuitMessage(0);
// Quit The Program
+                       }
+                       break;
+               case WM_PAINT:
+               {
+                       DrawGLScene();
+                       SwapBuffers(hDC);
+                       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
+                       ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));   // Resize To The
New Window Size
+                       break;
+
+               default:
+                       return (DefWindowProc(hWnd, message, wParam, lParam));  // Pass
Windows Messages
+       }
+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;
+       }
+}
+
+void ParseCommandLine(PSTR szCmdLine, int *chOption, HWND *hwndParent)
+{
+       int ch;
+
+       if (!strlen(szCmdLine))
+               return;
+
+       ch = *szCmdLine++;
+
+       if(ch == '-' || ch == '/')
+               ch = *szCmdLine++;
+
+       if(ch >= 'A' && ch <= 'Z')
+               ch += 'a' - 'A';
+
+       *chOption = ch;
+
+       if (ch == 's' || ch == 'c')
+               return;
+
+       ch = *szCmdLine++;
+
+       if(ch == ':')
+               ch = *szCmdLine++;
+
+       while(ch == ' ' || ch == '\t')
+               ch = *szCmdLine++;
+
+       if(isdigit(ch))
+       {
+               unsigned int i = atoi(szCmdLine - 1);
+               *hwndParent = (HWND)i;
+       }
+       else
+               *hwndParent = 0;
+}
+
+//
+//     Dialogbox procedure for Configuration window
+//
+BOOL CALLBACK ConfigDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+       switch(uMsg)
+       {
+        case WM_INITDIALOG:
+                       SetDlgItemText(hwnd, IDC_MESSAGE_TEXT, m_Text);
+                       return TRUE;
+        case WM_COMMAND:
+            switch(LOWORD(wParam))
+            {
+                case IDOK:
+                                       GetDlgItemText(hwnd, IDC_MESSAGE_TEXT, m_Text,
MAX_PATH);
+                                       SaveSettings();
+                    EndDialog(hwnd, IDOK);
+                break;
+                case IDCANCEL:
+                    EndDialog(hwnd, IDCANCEL);
+                break;
+            }
+                       return FALSE;
+               case WM_CLOSE:
+                       EndDialog(hwnd, 0);
+                       break;
+        default:
+            return FALSE;
+       }
+
+       return TRUE;
+}
+
+void Configure(void)
+{
+       DialogBox(hInstance, MAKEINTRESOURCE(IDD_CONFIG), NULL , (DLGPROC)ConfigDlgProc);
+}
+
+int WINAPI WinMain (HINSTANCE hInst,
+                    HINSTANCE hPrev,
+                    LPSTR lpCmdLine,
+                    int iCmdShow)
+{
+       HWND    hwndParent = 0;
+       int     chOption = 0;
+       MSG     Message;
+
+       hInstance = hInst;
+
+       ParseCommandLine(lpCmdLine, &chOption, &hwndParent);
+
+       LoadSettings();
+
+       switch(chOption)
+       {
+               case 's':
+                       InitSaver(0);
+                       break;
+
+               case 'p':
+                       InitSaver(hwndParent);
+                       break;
+
+               case 'c':
+               default:
+                       Configure();
+                       return 0;
+       }
+
+       while (GetMessage(&Message, 0, 0, 0))
+               DispatchMessage(&Message);
+
+       return Message.wParam;
+}
+
Propchange: trunk/reactos/base/applications/screensavers/3dtext/3dtext.c
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/3dtext.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/3dtext.h (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/3dtext.h Sat Oct 27 02:34:42 2007
@@ -1,0 +1,26 @@
+/*
+ * 3D Text OpenGL Screensaver (3dtext.h)
+ *
+ * Copyright 2007 Marc Piulachs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+//////////////////////////////////////////////////////////////////
+
+TCHAR m_Text[MAX_PATH];
+
+void LoadSettings();
+void SaveSettings();
Propchange: trunk/reactos/base/applications/screensavers/3dtext/3dtext.h
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/3dtext.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/3dtext.rbuild (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/3dtext.rbuild Sat Oct 27 02:34:42
2007
@@ -1,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
+<module name="3dtext" type="win32scr"
installbase="system32" installname="3dtext.scr">
+       <define name="__USE_W32API" />
+       <library>kernel32</library>
+       <library>user32</library>
+       <library>gdi32</library>
+       <library>opengl32</library>
+       <library>glu32</library>
+       <library>advapi32</library>
+
+       <file>3dtext.c</file>
+       <file>settings.c</file>
+       <file>rsrc.rc</file>
+
+       <metadata description="3D text OpenGL screensaver" />
+</module>
Propchange: trunk/reactos/base/applications/screensavers/3dtext/3dtext.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/lang/en-US.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/lang/en-US.rc (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/lang/en-US.rc Sat Oct 27 02:34:42
2007
@@ -1,0 +1,19 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDD_CONFIG DIALOGEX 0, 0, 273, 178
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION |
WS_SYSMENU
+CAPTION "3D Text Screensaver Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,216,7,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,216,24,50,14
+    EDITTEXT        IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
+    LTEXT           "Custom text",IDC_STATIC_TEXT,18,17,40,8
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_DESCRIPTION "3D Text ScreenSaver"
+    IDS_TITLE       "About"
+    IDS_TEXT        "No options need to be set."
+END
Propchange: trunk/reactos/base/applications/screensavers/3dtext/lang/en-US.rc
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc Sat Oct 27 02:34:42
2007
@@ -1,0 +1,19 @@
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+IDD_CONFIG DIALOGEX 0, 0, 273, 178
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION |
WS_SYSMENU
+CAPTION "3D Text Screensaver Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    DEFPUSHBUTTON   "Aceptar",IDOK,216,7,50,14
+    PUSHBUTTON      "Cancelar",IDCANCEL,216,24,50,14
+    EDITTEXT        IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL
+    LTEXT           "Texto personalizado",IDC_STATIC_TEXT,18,17,40,8
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_DESCRIPTION "3D Text ScreenSaver"
+    IDS_TITLE       "Acerca de.."
+    IDS_TEXT        "No options need to be set."
+END
Propchange: trunk/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/resource.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/resource.h (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/resource.h Sat Oct 27 02:34:42
2007
@@ -1,0 +1,23 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// 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
Propchange: trunk/reactos/base/applications/screensavers/3dtext/resource.h
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/rsrc.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/rsrc.rc (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/rsrc.rc Sat Oct 27 02:34:42 2007
@@ -1,0 +1,14 @@
+#include <windows.h>
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION    "OpenGL 3DText ScreenSaver\0"
+#define REACTOS_STR_INTERNAL_NAME       "ss3dtext\0"
+#define REACTOS_STR_ORIGINAL_FILENAME   "ss3dtext.scr\0"
+
+#include <reactos/version.rc>
+
+#include "lang/en-US.rc"
+#include "lang/es-ES.rc"
Propchange: trunk/reactos/base/applications/screensavers/3dtext/rsrc.rc
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/base/applications/screensavers/3dtext/settings.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/screensa…
==============================================================================
--- trunk/reactos/base/applications/screensavers/3dtext/settings.c (added)
+++ trunk/reactos/base/applications/screensavers/3dtext/settings.c Sat Oct 27 02:34:42
2007
@@ -1,0 +1,55 @@
+/*
+ * 3D Text OpenGL Screensaver (settings.c)
+ *
+ * Copyright 2007 Marc Piulachs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+//////////////////////////////////////////////////////////////////
+
+#include <windows.h>
+#include <tchar.h>
+#include "3dtext.h"
+
+TCHAR m_Text[MAX_PATH];
+
+void LoadSettings()
+{
+       HKEY hkey;
+       DWORD len = MAX_PATH;
+
+       RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\Microsoft\\ScreenSavers\\Text3D"), 0,
+               _T(""), 0, KEY_READ, NULL, &hkey, NULL);
+
+       if(RegQueryValueEx(hkey, _T("DisplayString"),  0, 0, (LPBYTE)m_Text,
&len) != ERROR_SUCCESS)
+       {
+               strcpy(m_Text  , "ReactOS Rocks!");
+       }
+
+       RegCloseKey(hkey);
+}
+
+void SaveSettings()
+{
+       HKEY hkey;
+
+       RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\Microsoft\\ScreenSavers\\Text3D"), 0,
+               _T(""), 0, KEY_WRITE, NULL, &hkey, NULL);
+
+       RegSetValueEx(hkey, _T("DisplayString"), 0, REG_SZ, (BYTE *)&m_Text,
sizeof (m_Text));
+
+       RegCloseKey(hkey);
+}
Propchange: trunk/reactos/base/applications/screensavers/3dtext/settings.c
------------------------------------------------------------------------------
    svn:eol-style = native