Ok Arch, it's good to remove unuseful brackets, but don't exaggerate too much. Also...
[reactos.git] / rosapps / applications / notevil / notevil.c
index 6723c09..8c9cdce 100644 (file)
@@ -1,5 +1,4 @@
-/* $Id$
- *
+/*
  * notevil.c
  *
  * --------------------------------------------------------------------
  * 19990411 EA
  * 19990515 EA
  */
-//#define UNICODE
+
 #include <windows.h>
 #include <stdio.h>
-#include <stdlib.h>
-#include <tchar.h>
 #include "resource.h"
 
-LPCTSTR app_name = _TEXT("notevil");
+// #define DISPLAY_COORD
 
-HANDLE myself;
-HANDLE ScreenBuffer;
+LPCWSTR app_name = L"notevil";
+
+HANDLE  myself;
+HANDLE  ScreenBuffer;
 CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
-HANDLE WaitableTimer;
-
-void
-WriteStringAt(
-       LPTSTR  lpString,
-       COORD   xy,
-       WORD    wColor
-       )
+HANDLE  WaitableTimer;
+
+VOID
+WriteStringAt(LPWSTR lpString,
+              COORD  xy,
+              WORD   wColor)
 {
-       DWORD   cWritten = 0;
-       WORD    wLen = lstrlen(lpString);
-
-       if (0 == wLen)
-               return;
-       // don't bother writing text when erasing
-       if( wColor )
-         WriteConsoleOutputCharacter( ScreenBuffer,
-                                      lpString,
-                                      wLen,
-                                      xy,
-                                      & cWritten
-                                      );
-       FillConsoleOutputAttribute(
-               ScreenBuffer,
-               wColor,
-               wLen,
-               xy,
-               & cWritten
-               );
+    DWORD cWritten = 0;
+    WORD  wLen;
+
+    if (!lpString || *lpString == 0) return;
+
+    wLen = wcslen(lpString);
+
+    /* Don't bother writing text when erasing */
+    if (wColor)
+    {
+        WriteConsoleOutputCharacterW(ScreenBuffer,
+                                     lpString,
+                                     wLen,
+                                     xy,
+                                     &cWritten);
+    }
+
+    FillConsoleOutputAttribute(ScreenBuffer,
+                               wColor,
+                               wLen,
+                               xy,
+                               &cWritten);
 }
 
 
 #ifdef DISPLAY_COORD
-void
+VOID
 WriteCoord(COORD c)
 {
-       COORD xy = {0,0};
-       TCHAR buf [40];
-
-       wsprintf(
-               buf,
-               _TEXT("x=%02d  y=%02d"),
-               c.X,
-               c.Y
-               );
-       WriteStringAt(
-               buf,
-               xy,
-               (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE)
-               );
+    COORD xy = {0,0};
+    WCHAR buf[40];
+
+    wsprintf(buf, L"x=%02d  y=%02d", c.X, c.Y);
+
+    WriteStringAt(buf, xy,
+                  BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
 }
 #endif /* def DISPLAY_COORD */
 
 
-INT
-GetNextString(
-       LPTSTR  Buffer,
-       INT     BufferSize,
-       DWORD   *Index
-       )
+VOID
+GetNextString(LPWSTR Buffer,
+              INT    BufferSize,
+              PDWORD Index)
 {
-       if (RES_LAST_INDEX == *Index)
-       {
-               *Index = RES_FIRST_INDEX;
-       }
-       else
-       {
-               ++*Index;
-       }
-       LoadString(
-               myself,
-               *Index,
-               Buffer,
-               BufferSize
-               );
-       return 0;
+    if (RES_LAST_INDEX == *Index)
+        *Index = RES_FIRST_INDEX;
+    else
+        ++*Index;
+
+    LoadStringW(myself, *Index, Buffer, BufferSize);
 }
 
 
 VOID
 DisplayTitle(VOID)
 {
-       LPTSTR szTitle = _TEXT("ReactOS Coders Console Parade");
-       COORD  xy;
+    LPWSTR szTitle = L"ReactOS Coders Console Parade";
+    COORD  xy;
 
-       xy.X = (ScreenBufferInfo.dwSize.X - lstrlen(szTitle)) / 2;
-       xy.Y = ScreenBufferInfo.dwSize.Y / 2;
+    xy.X = (ScreenBufferInfo.dwSize.X - wcslen(szTitle)) / 2;
+    xy.Y = ScreenBufferInfo.dwSize.Y / 2;
 
-       WriteStringAt(
-               szTitle,
-               xy,
-               (FOREGROUND_GREEN | FOREGROUND_INTENSITY)
-               );
+    WriteStringAt(szTitle, xy,
+                  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
 }
 
 
 #define RES_DELAY_CHANGE 12
 #define RES_BUFFER_SIZE  1024
-void
-MainLoop(void)
+VOID
+MainLoop(VOID)
 {
-       TCHAR   NameString [RES_BUFFER_SIZE];
-       DWORD   NameIndex = 1;
-       INT     NameLength = 0;
-       COORD   xy;
-       INT     n = RES_DELAY_CHANGE;
-       INT     dir_y = 1;
-       INT     dir_x = 1;
-       WORD    wColor = 1;
-
-       xy.X = ScreenBufferInfo.dwSize.X / 2;
-       xy.Y = ScreenBufferInfo.dwSize.Y / 2;
-
-       for ( ; 1; ++n )
-       {
-               if (n == RES_DELAY_CHANGE)
-               {
-                       n = GetNextString(
-                               NameString,
-                               RES_BUFFER_SIZE,
-                               & NameIndex
-                               );
-                       NameLength = lstrlen(NameString);
-                       wColor++;
-                       if ((wColor & 0x000F) == 0)
-                               wColor = 1;
-               }
-               if (xy.X == 0)
-               {
-                       if (dir_x == -1)
-                               dir_x = 1;
-               }
-               else if (xy.X >= ScreenBufferInfo.dwSize.X - NameLength - 1)
-               {
-                       if (dir_x == 1)
-                               dir_x = -1;
-               }
-               xy.X += dir_x;
-
-               if (xy.Y == 0)
-               {
-                       if (dir_y == -1)
-                               dir_y = 1;
-               }
-               else if (xy.Y >= ScreenBufferInfo.dwSize.Y - 1)
-               {
-                       if (dir_y == 1)
-                               dir_y = -1;
-               }
-               xy.Y += dir_y;
+    WCHAR NameString[RES_BUFFER_SIZE];
+    DWORD NameIndex  = 0;
+    INT   NameLength = 0;
+    COORD xy;
+    INT   n = RES_DELAY_CHANGE;
+    INT   dir_y  = 1;
+    INT   dir_x  = 1;
+    WORD  wColor = 1;
+
+    xy.X = ScreenBufferInfo.dwSize.X / 2;
+    xy.Y = ScreenBufferInfo.dwSize.Y / 2;
+
+    for ( ; 1; ++n )
+    {
+        if (n == RES_DELAY_CHANGE)
+        {
+            n = 0;
+
+            GetNextString(NameString,
+                          RES_BUFFER_SIZE,
+                          &NameIndex);
+            NameLength = wcslen(NameString);
+
+            wColor++;
+            if ((wColor & 0x000F) == 0)
+                wColor = 1;
+        }
+        if (xy.X == 0)
+        {
+            if (dir_x == -1)
+                dir_x = 1;
+        }
+        else if (xy.X >= ScreenBufferInfo.dwSize.X - NameLength - 1)
+        {
+            if (dir_x == 1)
+                dir_x = -1;
+        }
+        xy.X += dir_x;
+
+        if (xy.Y == 0)
+        {
+            if (dir_y == -1)
+                dir_y = 1;
+        }
+        else if (xy.Y >= ScreenBufferInfo.dwSize.Y - 1)
+        {
+            if (dir_y == 1)
+                dir_y = -1;
+        }
+        xy.Y += dir_y;
+
 #ifdef DISPLAY_COORD
-               WriteCoord(xy);
+        WriteCoord(xy);
 #endif /* def DISPLAY_COORD */
-               DisplayTitle();
-               WriteStringAt(
-                       NameString,
-                       xy,
-                       wColor
-                       );
-               WaitForSingleObject( WaitableTimer, INFINITE );
-               WriteStringAt(
-                       NameString,
-                       xy,
-                       0
-                       );
-       }
+
+        DisplayTitle();
+        WriteStringAt(NameString, xy, wColor);
+        WaitForSingleObject(WaitableTimer, INFINITE);
+        WriteStringAt(NameString, xy, 0);
+    }
 }
 
 
-int
-main(
-       int     argc,
-       char    *argv []
-       )
+int wmain(int argc, WCHAR* argv[])
 {
-        LARGE_INTEGER lint;
-       DWORD Written;
-       COORD Coord = { 0, 0 };
-
-       myself = GetModuleHandle(NULL);
-
-       GetConsoleScreenBufferInfo (GetStdHandle(STD_OUTPUT_HANDLE),
-                                   &ScreenBufferInfo);
-       ScreenBufferInfo.dwSize.X = ScreenBufferInfo.srWindow.Right - ScreenBufferInfo.srWindow.Left + 1;
-       ScreenBufferInfo.dwSize.Y = ScreenBufferInfo.srWindow.Bottom - ScreenBufferInfo.srWindow.Top + 1;
-       ScreenBuffer = CreateConsoleScreenBuffer(
-                       GENERIC_WRITE,
-                       0,
-                       NULL,
-                       CONSOLE_TEXTMODE_BUFFER,
-                       NULL
-                       );
-       if (INVALID_HANDLE_VALUE == ScreenBuffer)
-       {
-               _ftprintf(
-                       stderr,
-                       _TEXT("%s: could not create a new screen buffer\n"),
-                       app_name
-                       );
-               return EXIT_FAILURE;
-       }
-       // Fill buffer with black background
-       FillConsoleOutputAttribute( ScreenBuffer,
-                                   0,
-                                   ScreenBufferInfo.dwSize.X * ScreenBufferInfo.dwSize.Y,
-                                   Coord,
-                                   &Written );
-
-       WaitableTimer = CreateWaitableTimer( NULL, FALSE, NULL );
-       if( WaitableTimer == INVALID_HANDLE_VALUE )
-         {
-           printf( "CreateWaitabletimer() failed\n" );
-           return 1;
-         }
-       lint.QuadPart = -2000000;
-       if( SetWaitableTimer( WaitableTimer, &lint, 200, NULL, NULL, FALSE ) == FALSE )
-         {
-           printf( "SetWaitableTimer() failed: 0x%lx\n", GetLastError() );
-           return 2;
-         }
-       SetConsoleActiveScreenBuffer(ScreenBuffer);
-       MainLoop();
-       CloseHandle(ScreenBuffer);
-       return EXIT_SUCCESS;
+    LARGE_INTEGER lint;
+    DWORD Written;
+    COORD Coord = { 0, 0 };
+
+    myself = GetModuleHandle(NULL);
+
+    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),
+                               &ScreenBufferInfo);
+    ScreenBufferInfo.dwSize.X = ScreenBufferInfo.srWindow.Right - ScreenBufferInfo.srWindow.Left + 1;
+    ScreenBufferInfo.dwSize.Y = ScreenBufferInfo.srWindow.Bottom - ScreenBufferInfo.srWindow.Top + 1;
+    ScreenBuffer = CreateConsoleScreenBuffer(GENERIC_WRITE,
+                                             0,
+                                             NULL,
+                                             CONSOLE_TEXTMODE_BUFFER,
+                                             NULL);
+    if (ScreenBuffer == INVALID_HANDLE_VALUE)
+    {
+        wprintf(L"%s: could not create a new screen buffer\n", app_name);
+        return EXIT_FAILURE;
+    }
+
+    /* Fill buffer with black background */
+    FillConsoleOutputAttribute(ScreenBuffer,
+                               0,
+                               ScreenBufferInfo.dwSize.X * ScreenBufferInfo.dwSize.Y,
+                               Coord,
+                               &Written);
+
+    WaitableTimer = CreateWaitableTimer(NULL, FALSE, NULL);
+    if (WaitableTimer == INVALID_HANDLE_VALUE)
+    {
+        wprintf(L"CreateWaitabletimer() failed\n");
+        return 1;
+    }
+    lint.QuadPart = -2000000;
+    if (!SetWaitableTimer(WaitableTimer, &lint, 200, NULL, NULL, FALSE))
+    {
+        wprintf(L"SetWaitableTimer() failed: 0x%lx\n", GetLastError());
+        return 2;
+    }
+    SetConsoleActiveScreenBuffer(ScreenBuffer);
+    MainLoop();
+    CloseHandle(ScreenBuffer);
+    return EXIT_SUCCESS;
 }
 
-
 /* EOF */