summaryrefslogtreecommitdiff
path: root/win
diff options
context:
space:
mode:
authorpeavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7>2007-07-16 15:39:31 +0000
committerpeavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7>2007-07-16 15:39:31 +0000
commitf60aa68ee934b5e8127582f51f713cc05ef1387a (patch)
tree252ef8f84cd0e5c9e400fd11dbb2b765385884ab /win
parent1cb674495d8903346831b0ca8baad9478c714861 (diff)
Ok windows.. YOU WIN :< .. but at least I can use MAXBUF now and configure will have to endure the fixed 500 limit :>
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7452 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'win')
-rw-r--r--win/configure.cpp7
-rw-r--r--win/inspircd_win32wrapper.cpp89
-rw-r--r--win/inspircd_win32wrapper.h6
3 files changed, 97 insertions, 5 deletions
diff --git a/win/configure.cpp b/win/configure.cpp
index 4acc18bf0..44666398e 100644
--- a/win/configure.cpp
+++ b/win/configure.cpp
@@ -13,8 +13,11 @@
#define _CRT_SECURE_NO_DEPRECATE
-#include <time.h>
-#include "inspircd_win32wrapper.h"
+#include <windows.h>
+#include <stdio.h>
+#include <string>
+#include <time.h>
+#include "colours.h"
using namespace std;
void Run();
diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp
index 0af54a39c..b3af867cf 100644
--- a/win/inspircd_win32wrapper.cpp
+++ b/win/inspircd_win32wrapper.cpp
@@ -197,6 +197,95 @@ const char * dlerror()
return errormessage;
}
+#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY
+#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
+#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
+#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE
+#define TWHITE TNORMAL | FOREGROUND_INTENSITY
+#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
+
+/* Handles colors in printf */
+int printf_c(const char * format, ...)
+{
+ // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P
+ static char message[MAXBUF];
+ static char temp[MAXBUF];
+ int color1, color2;
+
+ /* parse arguments */
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(message, 500, format, ap);
+ va_end(ap);
+
+ /* search for unix-style escape sequences */
+ int t;
+ int c = 0;
+ const char * p = message;
+ while (*p != 0)
+ {
+ if (*p == '\033')
+ {
+ // Escape sequence -> copy into the temp buffer, and parse the color.
+ p++;
+ t = 0;
+ while ((*p) && (*p != 'm'))
+ {
+ temp[t++] = *p;
+ ++p;
+ }
+
+ temp[t] = 0;
+ p++;
+
+ if (*temp == '[')
+ {
+ if (sscanf(temp, "[%u;%u", &color1, &color2) == 2)
+ {
+ switch(color2)
+ {
+ case 32: // Green
+ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow
+ break;
+
+ default: // Unknown
+ // White
+ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
+ break;
+ }
+ }
+ else
+ {
+ switch (*(temp+1))
+ {
+ case '0':
+ // Returning to normal colour.
+ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
+ break;
+
+ case '1':
+ // White
+ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);
+ break;
+
+ default:
+ char message[50];
+ sprintf(message, "Unknown color code: %s", temp);
+ MessageBox(0, message, message, MB_OK);
+ break;
+ }
+ }
+ }
+ }
+
+ putchar(*p);
+ ++c;
+ ++p;
+ }
+
+ return c;
+}
+
int arg_counter = 1;
char optarg[514];
int getopt_long_only(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind)
diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h
index 250f41e3f..2daa4ced7 100644
--- a/win/inspircd_win32wrapper.h
+++ b/win/inspircd_win32wrapper.h
@@ -66,9 +66,6 @@
#include <stdio.h>
#include <algorithm>
-/* printf_c support for printing ansi colors in console */
-#include "colours.h"
-
/* strcasecmp is not defined on windows by default */
#define strcasecmp _stricmp
@@ -103,6 +100,9 @@ CoreExport int inet_aton(const char *, struct in_addr *);
/* Unix-style get running user id */
CoreExport int geteuid();
+/* Handles colors in printf */
+CoreExport int printf_c(const char * format, ...);
+
/* getopt() wrapper */
# define no_argument 0
# define required_argument 1