home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / Binary_Bot54213292002.psc / VLBot / ConsoleOutput.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-01  |  4.7 KB  |  187 lines

  1. #include "ConsoleOutput.h"
  2.  
  3. ConsoleOutput::ConsoleOutput(CRITICAL_SECTION *_Synchronize, bool createscreenbuffer, const char *_log) {
  4. #ifndef GENERAL_RELEASE
  5.     if(createscreenbuffer == false) {
  6.         AllocConsole();
  7.         output = GetStdHandle(STD_OUTPUT_HANDLE);
  8.     } else {
  9.         output = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, 0, CONSOLE_TEXTMODE_BUFFER, 0);
  10.     }
  11.     createdscreenbuffer = createscreenbuffer;
  12.     Synchronize = _Synchronize;
  13.     CONSOLE_SCREEN_BUFFER_INFO csbi;
  14.     COORD coo;
  15.     GetConsoleScreenBufferInfo(output, &csbi);
  16.     coo = csbi.dwSize;
  17.     coo.Y = 500;
  18.     SetConsoleScreenBufferSize(output, coo);
  19.     if(_log) {
  20.         log = new char[strlen(_log) + 1];
  21.         strcpy(log, _log);
  22.     } else {
  23.         log = 0;
  24.     }
  25. #endif
  26. }
  27.  
  28. ConsoleOutput::~ConsoleOutput() {
  29. #ifndef GENERAL_RELEASE
  30.     EnterCriticalSection(Synchronize);
  31.     if(log)
  32.         delete [] log;
  33.     if(createdscreenbuffer == false)
  34.         FreeConsole();
  35.     else
  36.         CloseHandle(output);
  37.     LeaveCriticalSection(Synchronize);
  38. #endif
  39. }
  40.  
  41. #ifndef GENERAL_RELEASE
  42. DWORD ConsoleOutput::Write(const char *format, va_list argptr) {
  43.     char tmpbuf[8192] = "";
  44.     DWORD nwritten = 0;
  45.     vsprintf(tmpbuf, format, argptr);
  46.     while(strchr(tmpbuf, '\x95')) // beep
  47.         *strchr(tmpbuf, '\x95') = '.';
  48.     while(strchr(tmpbuf, '\x07')) // beep
  49.         *strchr(tmpbuf, '\x07') = '.';
  50.     while(strchr(tmpbuf, '\x10')) // backspace
  51.         *strchr(tmpbuf, '\10') = '.';
  52.     CharToOem(tmpbuf, tmpbuf);
  53.     WriteConsole(output, tmpbuf, strlen(tmpbuf), &nwritten, 0);
  54.     return nwritten;
  55. }
  56.  
  57. void ConsoleOutput::SetColor(char color) {
  58.     switch (color) {
  59.     case WHITE:
  60.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  61.         break;
  62.         
  63.     case GRAY:
  64.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  65.         break;
  66.         
  67.     case YELLOW:
  68.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  69.         break;
  70.         
  71.     case RED:
  72.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_INTENSITY);
  73.         break;
  74.         
  75.     case GREEN:
  76.         SetConsoleTextAttribute(output, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  77.         break;
  78.         
  79.     case BLUE:
  80.         SetConsoleTextAttribute(output, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  81.         break;
  82.         
  83.     case MIDBLUE:
  84.         SetConsoleTextAttribute(output, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  85.         break;
  86.         
  87.     case BLUEGREEN:
  88.         SetConsoleTextAttribute(output, FOREGROUND_GREEN | FOREGROUND_BLUE);
  89.         break;
  90.         
  91.     case PURPLE:
  92.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  93.         break;
  94.         
  95.     case DARKBLUE:
  96.         SetConsoleTextAttribute(output, FOREGROUND_BLUE);
  97.         break;
  98.         
  99.     case DARKPURPLE:
  100.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_BLUE);
  101.         break;
  102.         
  103.     case DARKYELLOW:
  104.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_GREEN);
  105.         break;
  106.         
  107.     case DARKGREEN:
  108.         SetConsoleTextAttribute(output, FOREGROUND_GREEN);
  109.         break;
  110.         
  111.     case DARKRED:
  112.         SetConsoleTextAttribute(output, FOREGROUND_RED);
  113.         break;
  114.         
  115.     default:
  116.         SetConsoleTextAttribute(output, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  117.         break;
  118.     }
  119. }
  120.  
  121. void ConsoleOutput::WriteLog(const char *format, va_list argptr) {
  122.     FILE *writelog = 0;
  123.     if(stricmp(log, "none")) {
  124.         writelog = fopen(log, "at");
  125.         vfprintf(writelog, format, argptr);
  126.         fclose(writelog);
  127.     }
  128. }
  129. #endif
  130.  
  131. DWORD ConsoleOutput::WriteEx(char color, const char *format, ...) {
  132.     DWORD result = 0;
  133. #ifndef GENERAL_RELEASE
  134.     EnterCriticalSection(Synchronize);
  135.     SetColor(color);
  136.     va_list argptr;
  137.     va_start(argptr, format);
  138.     result = Write(format, argptr);
  139.     if(log)
  140.         WriteLog(format, argptr);
  141.     va_end(argptr);
  142.     LeaveCriticalSection(Synchronize);
  143. #endif
  144.     return result;
  145. }
  146.  
  147. #ifndef GENERAL_RELEASE
  148. void ConsoleOutput::SetTitle(const char *title) {
  149.     EnterCriticalSection(Synchronize);
  150.     SetConsoleTitle(title);
  151.     LeaveCriticalSection(Synchronize);
  152. }
  153.  
  154. char *ConsoleOutput::GetTitle(char *buffer, DWORD size) {
  155.     EnterCriticalSection(Synchronize);
  156.     GetConsoleTitle(buffer, size);
  157.     LeaveCriticalSection(Synchronize);
  158.     return buffer;
  159. }
  160.  
  161. void ConsoleOutput::Activate(void) {
  162.     EnterCriticalSection(Synchronize);
  163.     SetConsoleActiveScreenBuffer(output);
  164.     LeaveCriticalSection(Synchronize);
  165. }
  166.  
  167. HWND ConsoleOutput::GetWindow(void) {
  168.     EnterCriticalSection(Synchronize);
  169.     HWND result = 0;
  170.     char buffer[1024] = "";
  171.     GetConsoleTitle(buffer, sizeof(buffer) - 1);
  172.     SetConsoleTitle("finder");
  173.     while(result == 0)
  174.         result = FindWindow(0, "finder");
  175.     SetConsoleTitle(buffer);
  176.     LeaveCriticalSection(Synchronize);
  177.     return result;
  178. }
  179.  
  180. void ConsoleOutput::SetLog(const char *_log) {
  181.     if(log)
  182.         delete [] log;
  183.     log = new char[strlen(_log) + 1];
  184.     strcpy(log, _log);
  185. }
  186. #endif
  187.