+++ /dev/null
-/*
- * notevil.c
- *
- * --------------------------------------------------------------------
- *
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This software 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this software; see the file COPYING.LIB. If
- * not, write to the Free Software Foundation, Inc., 675 Mass Ave,
- * Cambridge, MA 02139, USA.
- *
- * --------------------------------------------------------------------
- * ReactOS Coders Console Parade
- *
- * 19990411 EA
- * 19990515 EA
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include "resource.h"
-
-// #define DISPLAY_COORD
-
-LPCWSTR app_name = L"notevil";
-
-HANDLE myself;
-HANDLE ScreenBuffer;
-CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
-HANDLE WaitableTimer;
-
-VOID
-WriteStringAt(LPWSTR lpString,
- COORD xy,
- WORD wColor)
-{
- 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
-WriteCoord(COORD c)
-{
- 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 */
-
-
-VOID
-GetNextString(LPWSTR Buffer,
- INT BufferSize,
- PDWORD Index)
-{
- if (RES_LAST_INDEX == *Index)
- *Index = RES_FIRST_INDEX;
- else
- ++*Index;
-
- LoadStringW(myself, *Index, Buffer, BufferSize);
-}
-
-
-VOID
-DisplayTitle(VOID)
-{
- LPWSTR szTitle = L"ReactOS Coders Console Parade";
- COORD xy;
-
- xy.X = (ScreenBufferInfo.dwSize.X - wcslen(szTitle)) / 2;
- xy.Y = ScreenBufferInfo.dwSize.Y / 2;
-
- WriteStringAt(szTitle, xy,
- FOREGROUND_GREEN | FOREGROUND_INTENSITY);
-}
-
-
-#define RES_DELAY_CHANGE 12
-#define RES_BUFFER_SIZE 1024
-VOID
-MainLoop(VOID)
-{
- 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);
-#endif /* def DISPLAY_COORD */
-
- DisplayTitle();
- WriteStringAt(NameString, xy, wColor);
- WaitForSingleObject(WaitableTimer, INFINITE);
- WriteStringAt(NameString, xy, 0);
- }
-}
-
-
-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 (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 */