]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Replace printf(_c) with iostream
authorChrisTX <chris@rev-crew.info>
Sun, 14 Oct 2012 00:13:49 +0000 (02:13 +0200)
committerChrisTX <chris@rev-crew.info>
Sun, 14 Oct 2012 00:13:49 +0000 (02:13 +0200)
18 files changed:
include/consolecolors.h [new file with mode: 0644]
include/inspircd.h
src/configreader.cpp
src/helperfuncs.cpp
src/inspircd.cpp
src/modmanager_dynamic.cpp
src/modmanager_static.cpp
src/socketengines/socketengine_epoll.cpp
src/socketengines/socketengine_kqueue.cpp
src/socketengines/socketengine_poll.cpp
src/socketengines/socketengine_ports.cpp
win/colors.h [deleted file]
win/configure.cpp
win/configure.vcxproj
win/inspircd.vcxproj
win/inspircd_win32wrapper.cpp
win/inspircd_win32wrapper.h
win/win32service.cpp

diff --git a/include/consolecolors.h b/include/consolecolors.h
new file mode 100644 (file)
index 0000000..953beb3
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * This file is part of InspIRCd.  InspIRCd 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, version 2.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONSOLECOLORS_H
+#define CONSOLECOLORS_H
+
+#include <ostream>
+
+#ifdef _WIN32
+
+#include <windows.h>
+
+extern WORD g_wOriginalColors;
+extern WORD g_wBackgroundColor;
+extern HANDLE g_hStdout;
+
+inline std::ostream& con_green(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+    return s;
+}
+
+inline std::ostream& con_red(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_INTENSITY|g_wBackgroundColor);
+    return s;
+}
+
+inline std::ostream& con_white(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|g_wBackgroundColor);
+    return s;
+}
+
+inline std::ostream& con_white_bright(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+    return s;
+}
+
+inline std::ostream& con_bright(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, FOREGROUND_INTENSITY|g_wBackgroundColor);
+    return s;
+}
+
+inline std::ostream& con_reset(std::ostream &s)
+{
+    SetConsoleTextAttribute(g_hStdout, g_wOriginalColors);
+    return s;
+}
+
+#else
+
+inline std::ostream& con_green(std::ostream &s)
+{
+    return s << "\033[1;32m";
+}
+
+inline std::ostream& con_red(std::ostream &s)
+{
+    return s << "\033[1;31m";
+}
+
+inline std::ostream& con_white(std::ostream &s)
+{
+    return s << "\033[0m";
+}
+
+inline std::ostream& con_white_bright(std::ostream &s)
+{
+    return s << "\033[1m";
+}
+
+inline std::ostream& con_bright(std::ostream &s)
+{
+    return s << "\033[1m";
+}
+
+inline std::ostream& con_reset(std::ostream &s)
+{
+    return s << "\033[0m";
+}
+
+#endif
+
+#endif
\ No newline at end of file
index cc627ca5780f75a2e53f0a93d63974f0094e7ed6..69c8bf47f63497015c0c41eb868ee7a9cc0b9c3b 100644 (file)
@@ -34,7 +34,6 @@
 #ifndef _WIN32
 #define DllExport
 #define CoreExport
-#define printf_c printf
 #else
 #include "inspircd_win32wrapper.h"
 /** Windows defines these already */
@@ -71,6 +70,7 @@
 #include "inspircd_config.h"
 #include "inspircd_version.h"
 #include "typedefs.h"
+#include "consolecolors.h"
 
 CoreExport extern InspIRCd* ServerInstance;
 
index 660df77d7025b2065525b6c1cc4627fd6d145cd8..82f4d7c43a8e0267fd3122b8b2f3b42917771cf8 100644 (file)
@@ -28,6 +28,7 @@
 #include "exitcodes.h"
 #include "commands/cmd_whowas.h"
 #include "configparser.h"
+#include <iostream>
 #ifdef _WIN32
 #include <Iphlpapi.h>
 #pragma comment(lib, "Iphlpapi.lib")
@@ -750,7 +751,7 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
                        continue;
                // On startup, print out to console (still attached at this point)
                if (!old)
-                       printf("%s\n", line.c_str());
+                       std::cout << line << std::endl;
                // If a user is rehashing, tell them directly
                if (user)
                        user->SendText(":%s NOTICE %s :*** %s", ServerInstance->Config->ServerName.c_str(), user->nick.c_str(), line.c_str());
index 7351a07de0bcb9d89e14b5ab19a2d3368e3e2eb4..a6df520c5d2d10fddb7a3306fd0ad35e9052d27e 100644 (file)
@@ -32,6 +32,7 @@
 #include "inspircd.h"
 #include "xline.h"
 #include "exitcodes.h"
+#include <iostream>
 
 std::string InspIRCd::GetServerDescription(const std::string& servername)
 {
@@ -319,8 +320,8 @@ void InspIRCd::CheckRoot()
 #ifndef _WIN32
        if (geteuid() == 0)
        {
-               printf("WARNING!!! You are running an irc server as ROOT!!! DO NOT DO THIS!!!\n\n");
-               this->Logs->Log("STARTUP",DEFAULT,"Cant start as root");
+               std::cout << "ERROR: You are running an irc server as root! DO NOT DO THIS!" << std::endl << std::endl;
+               this->Logs->Log("STARTUP",DEFAULT,"Can't start as root");
                Exit(EXIT_STATUS_ROOT);
        }
 #endif
index 42047ce1111a59b81d26dc8f1d1618a2f614f5b5..cb50595d227f81a6623e2ddf1178802dc3b77cba 100644 (file)
 
        #include <pwd.h> // setuid
        #include <grp.h> // setgid
+#else
+       WORD g_wOriginalColors;
+       WORD g_wBackgroundColor;
+       HANDLE g_hStdout;
 #endif
 
 #include <fstream>
+#include <iostream>
 #include "xline.h"
 #include "bancache.h"
 #include "socketengine.h"
@@ -242,7 +247,7 @@ void InspIRCd::QuickExit(int status)
 bool InspIRCd::DaemonSeed()
 {
 #ifdef _WIN32
-       printf_c("InspIRCd Process ID: \033[1;32m%lu\033[0m\n", GetCurrentProcessId());
+       std::cout << "InspIRCd Process ID: " << con_green << GetCurrentProcessId() << con_reset << std::endl;
        return true;
 #else
        signal(SIGTERM, InspIRCd::QuickExit);
@@ -264,7 +269,7 @@ bool InspIRCd::DaemonSeed()
                exit(0);
        }
        setsid ();
-       printf("InspIRCd Process ID: \033[1;32m%lu\033[0m\n",(unsigned long)getpid());
+       std::cout << "InspIRCd Process ID: " << con_green << getpid() << con_reset << std::endl;
 
        signal(SIGTERM, InspIRCd::SetSignal);
 
@@ -297,7 +302,7 @@ void InspIRCd::WritePID(const std::string &filename)
        }
        else
        {
-               printf("Failed to write PID-file '%s', exiting.\n",fname.c_str());
+               std::cout << "Failed to write PID-file '" << fname << "', exiting." << std::endl;
                this->Logs->Log("STARTUP",DEFAULT,"Failed to write PID-file '%s', exiting.",fname.c_str());
                Exit(EXIT_STATUS_PID);
        }
@@ -389,6 +394,20 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
 #ifdef _WIN32
        srand(TIME.tv_nsec ^ TIME.tv_sec);
+
+       // Initialize the console values
+       g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+       CONSOLE_SCREEN_BUFFER_INFO bufinf;
+       if(GetConsoleScreenBufferInfo(g_hStdout, &bufinf))
+       {
+               g_wOriginalColors = bufinf.wAttributes & 0x00FF;
+               g_wBackgroundColor = bufinf.wAttributes & 0x00F0;
+       }
+       else
+       {
+               g_wOriginalColors = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN;
+               g_wBackgroundColor = 0;
+       }
 #else
        srandom(TIME.tv_nsec ^ TIME.tv_sec);
 #endif
@@ -426,8 +445,9 @@ InspIRCd::InspIRCd(int argc, char** argv) :
                                /* Unknown parameter */
                        default:
                                /* Fall through to handle other weird values too */
-                               printf("Unknown parameter '%s'\n", argv[optind-1]);
-                               printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n%*s[--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0], static_cast<int>(8+strlen(argv[0])), " ");
+                               std::cout << "Unknown parameter '" << argv[optind-1] << "'" << std::endl;
+                               std::cout << "Usage: " << argv[0] << " [--nofork] [--nolog] [--debug] [--logfile <filename>] " << std::endl <<
+                                       std::string(static_cast<int>(8+strlen(argv[0])), ' ') << "[--runasroot] [--version] [--config <config>] [--testsuite]" << std::endl;
                                Exit(EXIT_STATUS_ARGV);
                        break;
                }
@@ -438,7 +458,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
        if (do_version)
        {
-               printf("\n%s r%s\n", VERSION, REVISION);
+               std::cout << std::endl << VERSION << " r" << REVISION << std::endl;
                Exit(EXIT_STATUS_NOERROR);
        }
 
@@ -462,7 +482,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
        }
        else if (!this->OpenLog(argv, argc))
        {
-               printf("ERROR: Could not open initial logfile %s: %s\n\n", Config->cmdline.startup_log.c_str(), strerror(errno));
+               std::cout << "ERROR: Could not open initial logfile " << Config->cmdline.startup_log << ": " << strerror(errno) << std::endl << std::endl;
                Exit(EXIT_STATUS_LOG);
        }
 
@@ -480,18 +500,18 @@ InspIRCd::InspIRCd(int argc, char** argv) :
                else
 #endif
                {
-                       printf("ERROR: Cannot open config file: %s\nExiting...\n", ConfigFileName.c_str());
+                       std::cout << "ERROR: Cannot open config file: " << ConfigFileName << std::endl << "Exiting..." << std::endl;
                        this->Logs->Log("STARTUP",DEFAULT,"Unable to open config file %s", ConfigFileName.c_str());
                        Exit(EXIT_STATUS_CONFIG);
                }
        }
 
-       printf_c("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__);
-       printf_c("(C) InspIRCd Development Team.\033[0m\n\n");
-       printf_c("Developers:\n");
-       printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special, peavey\n");
-       printf_c("\t\033[1;32maquanight, psychon, dz, danieldg, jackmcbarn\033[0m\n\n");
-       printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n");
+       std::cout << con_green << "Inspire Internet Relay Chat Server" << con_reset << ", compiled on " __DATE__ " at " __TIME__ << std::endl;
+       std::cout << con_green << "(C) InspIRCd Development Team." << con_reset << std::endl << std::endl;
+       std::cout << "Developers:" << std::endl;
+       std::cout << con_green << "\tBrain, FrostyCoolSlug, w00t, Om, Special, peavey" << std::endl;
+       std::cout << "\taquanight, psychon, dz, danieldg, jackmcbarn" << con_reset << std::endl << std::endl;
+       std::cout << "Others:\t\t\t" << con_green << "See /INFO Output" << con_reset << std::endl;
 
        this->Modes = new ModeParser;
 
@@ -500,14 +520,14 @@ InspIRCd::InspIRCd(int argc, char** argv) :
                this->CheckRoot();
        else
        {
-               printf("* WARNING * WARNING * WARNING * WARNING * WARNING * \n\n");
-               printf("YOU ARE RUNNING INSPIRCD AS ROOT. THIS IS UNSUPPORTED\n");
-               printf("AND IF YOU ARE HACKED, CRACKED, SPINDLED OR MUTILATED\n");
-               printf("OR ANYTHING ELSE UNEXPECTED HAPPENS TO YOU OR YOUR\n");
-               printf("SERVER, THEN IT IS YOUR OWN FAULT. IF YOU DID NOT MEAN\n");
-               printf("TO START INSPIRCD AS ROOT, HIT CTRL+C NOW AND RESTART\n");
-               printf("THE PROGRAM AS A NORMAL USER. YOU HAVE BEEN WARNED!\n");
-               printf("\nInspIRCd starting in 20 seconds, ctrl+c to abort...\n");
+               std::cout << "* WARNING * WARNING * WARNING * WARNING * WARNING *" << std::endl\r
+               << "YOU ARE RUNNING INSPIRCD AS ROOT. THIS IS UNSUPPORTED" << std::endl\r
+               << "AND IF YOU ARE HACKED, CRACKED, SPINDLED OR MUTILATED" << std::endl\r
+               << "OR ANYTHING ELSE UNEXPECTED HAPPENS TO YOU OR YOUR" << std::endl\r
+               << "SERVER, THEN IT IS YOUR OWN FAULT. IF YOU DID NOT MEAN" << std::endl\r
+               << "TO START INSPIRCD AS ROOT, HIT CTRL+C NOW AND RESTART" << std::endl\r
+               << "THE PROGRAM AS A NORMAL USER. YOU HAVE BEEN WARNED!" << std::endl << std::endl\r
+               << "InspIRCd starting in 20 seconds, ctrl+c to abort..." << std::endl;\r
                sleep(20);
        }
 #endif
@@ -518,7 +538,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
        {
                if (!this->DaemonSeed())
                {
-                       printf("ERROR: could not go into daemon mode. Shutting down.\n");
+                       std::cout << "ERROR: could not go into daemon mode. Shutting down." << std::endl;
                        Logs->Log("STARTUP", DEFAULT, "ERROR: could not go into daemon mode. Shutting down.");
                        Exit(EXIT_STATUS_FORK);
                }
@@ -564,7 +584,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
        int bounditems = BindPorts(pl);
 
-       printf("\n");
+       std::cout << std::endl;
 
        this->Modules->LoadAll();
 
@@ -574,26 +594,26 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
        if (!pl.empty())
        {
-               printf("\nWARNING: Not all your client ports could be bound --\nstarting anyway with %d of %d client ports bound.\n\n",
-                       bounditems, bounditems + (int)pl.size());
-               printf("The following port(s) failed to bind:\n");
-               printf("Hint: Try using a public IP instead of blank or *\n\n");
+               std::cout << std::endl << "WARNING: Not all your client ports could be bound -- " << std::endl << "starting anyway with " << bounditems
+                       << " of " << bounditems + (int)pl.size() << " client ports bound." << std::endl << std::endl;
+               std::cout << "The following port(s) failed to bind:" << std::endl << std::endl;
                int j = 1;
                for (FailedPortList::iterator i = pl.begin(); i != pl.end(); i++, j++)
                {
-                       printf("%d.\tAddress: %s\tReason: %s\n", j, i->first.empty() ? "<all>" : i->first.c_str(), i->second.c_str());
+                       std::cout << j << ".\tAddress: " << (i->first.empty() ? "<all>" : i->first) << " \tReason: " << i->second << std::endl;
                }
+
+               std::cout << std::endl << "Hint: Try using a public IP instead of blank or *" << std::endl;
        }
 
-       printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n",
-               Config->ServerName.c_str(),Config->GetSID().c_str(), SE->GetMaxFds());
+       std::cout << "InspIRCd is now running as '" << Config->ServerName << "'[" << Config->GetSID() << "] with " << SE->GetMaxFds() << " max open sockets" << std::endl;
 
 #ifndef _WIN32
        if (!Config->cmdline.nofork)
        {
                if (kill(getppid(), SIGTERM) == -1)
                {
-                       printf("Error killing parent process: %s\n",strerror(errno));
+                       std::cout << "Error killing parent process: " << strerror(errno) << std::endl;
                        Logs->Log("STARTUP", DEFAULT, "Error killing parent process: %s",strerror(errno));
                }
        }
@@ -778,9 +798,9 @@ int InspIRCd::Run()
                        if(QueryPerformanceCounter(&stats->LastSampled))
                        {
                                FILETIME CreationTime;
-                       FILETIME ExitTime;
-                       FILETIME KernelTime;
-                       FILETIME UserTime;
+                               FILETIME ExitTime;
+                               FILETIME KernelTime;
+                               FILETIME UserTime;
                                GetProcessTimes(GetCurrentProcess(), &CreationTime, &ExitTime, &KernelTime, &UserTime);
                                stats->LastCPU.dwHighDateTime = KernelTime.dwHighDateTime + UserTime.dwHighDateTime;
                                stats->LastCPU.dwLowDateTime = KernelTime.dwLowDateTime + UserTime.dwLowDateTime;
index 0e90a9ae5e6976cf12021f040d6f1f56234224f1..27da56c692ab32f9a779403563d02b7d9082b9b6 100644 (file)
@@ -24,6 +24,7 @@
 #include "command_parse.h"
 #include "dns.h"
 #include "exitcodes.h"
+#include <iostream>
 
 #ifndef _WIN32
 #include <dirent.h>
@@ -183,7 +184,7 @@ void ModuleManager::LoadAll()
 {
        ModCount = 0;
 
-       printf("\nLoading core commands");
+       std::cout << std::endl << "Loading core commands";
        fflush(stdout);
 
        DIR* library = opendir(ServerInstance->Config->ModPath.c_str());
@@ -194,19 +195,19 @@ void ModuleManager::LoadAll()
                {
                        if (InspIRCd::Match(entry->d_name, "cmd_*.so", ascii_case_insensitive_map))
                        {
-                               printf(".");
+                               std::cout << ".";
                                fflush(stdout);
 
                                if (!Load(entry->d_name, true))
                                {
                                        ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
-                                       printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+                                       std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
                                        ServerInstance->Exit(EXIT_STATUS_MODULE);
                                }
                        }
                }
                closedir(library);
-               printf("\n");
+               std::cout << std::endl;
        }
 
        ConfigTagList tags = ServerInstance->Config->ConfTags("module");
@@ -214,12 +215,12 @@ void ModuleManager::LoadAll()
        {
                ConfigTag* tag = i->second;
                std::string name = tag->getString("name");
-               printf_c("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",name.c_str());
+               std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
 
                if (!this->Load(name, true))
                {
                        ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
-                       printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+                       std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
                        ServerInstance->Exit(EXIT_STATUS_MODULE);
                }
        }
@@ -236,7 +237,7 @@ void ModuleManager::LoadAll()
                {
                        LastModuleError = "Unable to initialize " + mod->ModuleSourceFile + ": " + modexcept.GetReason();
                        ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
-                       printf_c("\n[\033[1;31m*\033[0m] %s\n\n", LastModuleError.c_str());
+                       std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << LastModuleError << std::endl << std::endl;
                        ServerInstance->Exit(EXIT_STATUS_MODULE);
                }
        }
index bb8fda400bd33b8672a2bb8e26a67bd315b16a51..b105eea924a23ff478a30e9bfcb7520c96469e11 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "inspircd.h"
 #include "exitcodes.h"
+#include <iostream>
 
 #ifdef PURE_STATIC
 
@@ -188,12 +189,12 @@ void ModuleManager::LoadAll()
        {
                ConfigTag* tag = i->second;
                std::string name = tag->getString("name");
-               printf_c("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",name.c_str());
+               std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
 
                if (!this->Load(name, true))
                {
                        ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
-                       printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+                       std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
                        ServerInstance->Exit(EXIT_STATUS_MODULE);
                }
        }
@@ -209,7 +210,7 @@ void ModuleManager::LoadAll()
                {
                        LastModuleError = "Unable to initialize " + mod->ModuleSourceFile + ": " + modexcept.GetReason();
                        ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
-                       printf_c("\n[\033[1;31m*\033[0m] %s\n\n", LastModuleError.c_str());
+                       std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << LastModuleError << std::endl << std::endl;
                        ServerInstance->Exit(EXIT_STATUS_MODULE);
                }
        }
index 79d69698a1d10ee95e40d966a44051d4e08a37b4..f7e107e7b028cd4db4301b21b56f533117d8d432 100644 (file)
@@ -26,6 +26,7 @@
 #include "socketengine.h"
 #include <sys/epoll.h>
 #include <ulimit.h>
+#include <iostream>
 #define EP_DELAY 5
 
 /** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
@@ -61,7 +62,7 @@ EPollEngine::EPollEngine()
        else
        {
                ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
-               printf("ERROR: Can't determine maximum number of open sockets!\n");
+               std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
 
@@ -72,8 +73,8 @@ EPollEngine::EPollEngine()
        {
                ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Could not initialize socket engine: %s", strerror(errno));
                ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.");
-               printf("ERROR: Could not initialize epoll socket engine: %s\n", strerror(errno));
-               printf("ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.\n");
+               std::cout << "ERROR: Could not initialize epoll socket engine: " << strerror(errno) << std::endl;
+               std::cout << "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now." << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
 
index 63e16ac6e13038279433f8ea412fa6e6c69652b6..5dd653363947151c313068efdaec6da39dbc688c 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/event.h>
 #include <sys/time.h>
 #include "socketengine.h"
+#include <iostream>
 
 /** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
  */
@@ -68,7 +69,7 @@ KQueueEngine::KQueueEngine()
        if (MAX_DESCRIPTORS <= 0)
        {
                ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
-               printf("ERROR: Can't determine maximum number of open sockets!\n");
+               std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
 
@@ -90,8 +91,8 @@ void KQueueEngine::RecoverFromFork()
        {
                ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.");
                ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: this is a fatal error, exiting now.");
-               printf("ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.\n");
-               printf("ERROR: this is a fatal error, exiting now.\n");
+               std::cout << "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features." << std::endl;
+               std::cout << "ERROR: this is a fatal error, exiting now." << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
        CurrentSetSize = 0;
index dd38c32b978c200c6ef980819dc3d4b27e190262..6a385c8d887fea1db5789c404b809c904af3facf 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef SOCKETENGINE_POLL
 #define SOCKETENGINE_POLL
 
+#include <iostream>
 #include <vector>
 #include <string>
 #include <map>
@@ -92,7 +93,7 @@ PollEngine::PollEngine()
        else
        {
                ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets: %s", strerror(errno));
-               printf("ERROR: Can't determine maximum number of open sockets: %s\n", strerror(errno));
+               std::cout << "ERROR: Can't determine maximum number of open sockets: " << strerror(errno) << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
 #else
index 5fc645bb10270e1ea43edc69a39d68fbfaac0b94..9a86c47d0cd915b6f597a35a026c41e91ec22ad3 100644 (file)
@@ -36,6 +36,7 @@
 #include "inspircd.h"
 #include "socketengine.h"
 #include <port.h>
+#include <iostream>
 
 /** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
  */
@@ -75,7 +76,7 @@ PortsEngine::PortsEngine()
        else
        {
                ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
-               printf("ERROR: Can't determine maximum number of open sockets!\n");
+               std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
        EngineHandle = port_create();
@@ -84,8 +85,8 @@ PortsEngine::PortsEngine()
        {
                ServerInstance->Logs->Log("SOCKET",SPARSE,"ERROR: Could not initialize socket engine: %s", strerror(errno));
                ServerInstance->Logs->Log("SOCKET",SPARSE,"ERROR: This is a fatal error, exiting now.");
-               printf("ERROR: Could not initialize socket engine: %s\n", strerror(errno));
-               printf("ERROR: This is a fatal error, exiting now.\n");
+               std::cout << "ERROR: Could not initialize socket engine: " << strerror(errno) << std::endl;
+               std::cout << "ERROR: This is a fatal error, exiting now." << std::endl;
                ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
        CurrentSetSize = 0;
diff --git a/win/colors.h b/win/colors.h
deleted file mode 100644 (file)
index b43ccbd..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * InspIRCd -- Internet Relay Chat Daemon
- *
- *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
- *
- * This file is part of InspIRCd.  InspIRCd 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, version 2.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef COLORS_H
-#define COLORS_H
-
-#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[500];
-       static char temp[500];
-       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);
-                                                       MessageBoxA(0, message, message, MB_OK);
-                                                       break;
-                                       }
-                               }
-                       }
-               }
-
-               putchar(*p);
-               ++c;
-               ++p;
-       }
-
-       return c;
-}
-
-#endif
-
index f05b00f8e306c197207c05774e05379a3a56f3e9..6f821894b53103c445648e4ff74181e533cb4535 100644 (file)
 #include <windows.h>
 #include <stdio.h>
 #include <process.h>
+#include "../include/consolecolors.h"
+
+WORD g_wOriginalColors;
+WORD g_wBackgroundColor;
+HANDLE g_hStdout;
+
 #include <iostream>
 #include <string>
 #include <vector>
 #include <time.h>
 #include "inspircd_win32wrapper.h"
-#include "colors.h"
 
 using namespace std;
 void Run();
@@ -43,8 +48,6 @@ void WriteCompileModules(const vector<string> &, const vector<string> &);
 void WriteCompileCommands();
 void CopyExtras();
 
-inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }
-
 #ifdef _WIN64
        // /MACHINE:X64
        #ifdef _DEBUG
@@ -64,12 +67,12 @@ int get_int_option(const char * text, int def)
 {
        static char buffer[500];
        int ret;
-       printf_c("%s\n[\033[1;32m%u\033[0m] -> ", text, def);
+       std::cout << text << std::endl << " [" << con_green << def << con_reset << "] -> ";
        fgets(buffer, sizeof(buffer), stdin);
        if(sscanf(buffer, "%u", &ret) != 1)
                ret = def;
 
-       printf("\n");
+       std::cout << std::endl;
        return ret;
 }
 
@@ -77,28 +80,28 @@ bool get_bool_option(const char * text, bool def)
 {
        static char buffer[500];
        char ret[100];
-       printf_c("%s [\033[1;32m%c\033[0m] -> ", text, def ? 'y' : 'n');
+       std::cout << text << " [" << con_green << (def ? 'y' : 'n') << con_reset << "] -> ";
        fgets(buffer, sizeof(buffer), stdin);
        if(sscanf(buffer, "%s", ret) != 1)
                strcpy(ret, def ? "y" : "n");
 
-       printf("\n");
+       std::cout << std::endl;
        return !strnicmp(ret, "y", 1);
 }
 
 string get_string_option(const char * text, char * def)
 {
        if (def && *def)
-               printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def);
+               std::cout << text << std::endl << "[" << con_green << def << con_reset << "] -> ";
        else
-               printf_c("%s\n[] -> ", text);
+               std::cout << text << std::endl << "[] -> ";
        
        char buffer[1000], buf[1000];
        fgets(buffer, sizeof(buffer), stdin);
        if (sscanf(buffer, "%s", buf) != 1)
                strcpy(buf, def);
        
-       printf("\n");
+       std::cout << std::endl;
        return buf;
 }
 
@@ -228,6 +231,20 @@ int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPS
        freopen("CONOUT$", "w", stdout);
        freopen("CONOUT$", "w", stderr);
 
+       // Initialize the console values
+       g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+       CONSOLE_SCREEN_BUFFER_INFO bufinf;
+       if(GetConsoleScreenBufferInfo(g_hStdout, &bufinf))
+       {
+               g_wOriginalColors = bufinf.wAttributes & 0x00FF;
+               g_wBackgroundColor = bufinf.wAttributes & 0x00F0;
+       }
+       else
+       {
+               g_wOriginalColors = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN;
+               g_wBackgroundColor = 0;
+       }
+
        Banner();
        Run();
        FreeConsole();
@@ -236,14 +253,14 @@ int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPS
 
 void Banner()
 {
-       printf_c("\nWelcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)\n"
-                        "\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m\n\n");
-       printf_c("*** If you are unsure of any of these values, leave it blank for      ***\n"
-                        "*** standard settings that will work, and your server will run          ***\n"
-                        "*** using them. Please consult your IRC network admin if in doubt.  ***\n\n"
-                        "Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter\n"
-                        "a new value. Please note: You will \033[1mHAVE\033[0m to read the docs\n"
-                        "dir, otherwise you won't have a config file!\n\n");
+       std::cout << std::endl << "Welcome to the " << con_white_bright << "InspIRCd" << con_reset << " Configuration program! (" << con_white_bright << "interactive mode" << con_reset << ")" << std::endl
+                        << con_white_bright << "Package maintainers: Type ./configure --help for non-interactive help" << con_reset << std::endl << std::endl
+                    << "*** If you are unsure of any of these values, leave it blank for       ***" << std::endl
+                        << "*** standard settings that will work, and your server will run       ***" << std::endl
+                        << "*** using them. Please consult your IRC network admin if in doubt.  ***" << std::endl << std::endl
+                        << "Press " << con_white_bright << "<RETURN>" << con_reset << " to accept the default for any option, or enter" << std::endl
+                        << "a new value. Please note: You will " << con_white_bright << "HAVE" << con_reset << " to read the docs" << std::endl
+                        << "dir, otherwise you won't have a config file!" << std::endl << std::endl;
 
 }
 
@@ -278,14 +295,14 @@ void Run()
        string branch(version);
        branch.erase(branch.find_last_of('.'));
        
+       std::cout << "Your operating system is: " << con_green << "Windows " <<
 #ifdef _WIN64
-       printf_c("Your operating system is: \033[1;32mWindows x64\033[0m\n");
+       "x64 (64-bit)"
 #else
-       printf_c("Your operating system is: \033[1;32mWindows x86\033[0m\n");
+       "x86 (32-bit)"
 #endif
-       printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", (!revision.empty() && revision != "0") ? revision.c_str() : "(Non-GIT build)");
-       
-       printf_c("\033[1mExtra modules.\033[0m\n");
+       << con_reset << std::endl << "InspIRCd revision ID: " << con_green << ( (!revision.empty() && revision != "0") ? revision : "(Non-GIT build)" ) << con_reset << std::endl << std::endl
+       << con_white_bright << "Extra modules." << con_reset << std::endl;
        if (get_bool_option("Do you want to compile any extra non-core modules?", false))
        {
                string extra_i_path = get_string_option("Extra include search paths separate by \";\"", ".");
@@ -295,7 +312,7 @@ void Run()
                extra_lib_paths = get_dir_list(extra_l_path);
        }
 
-       printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
+       std::cout << con_white_bright << "All paths are relative to the binary directory." << con_reset << std::endl;
        string base_path = get_string_option("In what directory do you wish to install the InspIRCd base?", "..");
        string config_path = get_string_option("In what directory are the configuration files?", "conf");
        string mod_path = get_string_option("In what directory are the modules to be compiled to?", "modules");
@@ -303,25 +320,24 @@ void Run()
        string log_path = get_string_option("In what directory is the logs to be placed in?", "logs");
        string bin_dir = get_string_option("In what directory is the IRCd binary to be placed?", ".");
 
-       printf_c("\n\033[1;32mPre-build configuration is complete!\n\n");       sc(TNORMAL);
+       std::cout << std::endl << con_green << "Pre-build configuration is complete!" << std::endl << std::endl;
 
        CopyExtras();
 
        // dump all the options back out
-       printf_c("\033[0mBase install path:\033[1;32m\t%s\n", base_path.c_str());
-       printf_c("\033[0mConfig path:\033[1;32m\t\t%s\n", config_path.c_str());
-       printf_c("\033[0mModule path:\033[1;32m\t\t%s\n", mod_path.c_str());
-       printf_c("\033[0mData path:\033[1;32m\t\t%s\n", data_path.c_str());
-       printf_c("\033[0mLog path:\033[1;32m\t\t%s\n", log_path.c_str());
-       printf_c("\033[0mSocket Engine:\033[1;32m\t\t%s\n", "select");
-
-       printf("\n"); sc(TNORMAL);
+       std::cout << con_reset << "Base install path:\t" << con_green << base_path << std::endl
+       << con_reset << "Config path:\t" << con_green << config_path << std::endl
+       << con_reset << "Module path:\t" << con_green << mod_path << std::endl
+       << con_reset << "Data path:\t"<< con_green << data_path << std::endl
+       << con_reset << "Log path:\t" << con_green << log_path << std::endl
+       << con_reset << "Socket Engine:\t" << con_green << "select" << con_reset << std::endl;
+
        if(get_bool_option("Are these settings correct?", true) == false)
        {
                Run();
                return;
        }
-       printf("\n");
+       std::cout << std::endl;
 
        // escape the pathes
        escape_string(data_path);
@@ -347,7 +363,7 @@ void Run()
        fprintf(f, "#endif\n\n");
        fclose(f);
 
-       sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+       std::cout << con_green << "done" << con_reset << std::endl;
        printf("Writing inspircd_version.h...");
        f = fopen("..\\include\\inspircd_version.h", "w");
        fprintf(f, "#define BRANCH \"%s\"\n", branch.c_str());
@@ -356,11 +372,11 @@ void Run()
        fprintf(f, "#define SYSTEM \"%s\"\n", machine_text);
        fclose(f);
 
-       sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+       std::cout << con_green << "done" << con_reset << std::endl;
        printf("Writing command and module compilation scripts...");
        WriteCompileCommands();
        WriteCompileModules(extra_include_paths, extra_lib_paths);
-       sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+       std::cout << con_green << "done" << con_reset << std::endl;
 
        printf("\nconfigure is done.. exiting!\n");
 }
@@ -390,8 +406,7 @@ void CopyExtras()
                {
                        fclose(x);
                        CopyFileA(src, dest, false);
-                       sc(TGREEN); printf("    %s", fd.cFileName); sc(TNORMAL);
-                       printf("...\n");
+                       std::cout << con_green << "\t" << fd.cFileName << con_reset << "..." << std::endl;
                }
        }
        while (FindNextFileA(fh, &fd));
@@ -409,10 +424,10 @@ void WriteCompileCommands()
        WIN32_FIND_DATAA fd;
        HANDLE fh = FindFirstFileA("..\\src\\commands\\cmd_*.cpp", &fd);
        if(fh == INVALID_HANDLE_VALUE)
-               printf_c("\033[1;32m  No command sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
+               std::cout << con_green << "  No command sources could be found! This *could* be a bad thing.. :P" << con_reset << std::endl;
        else
        {
-               sc(TGREEN);
+               std::cout << con_green;
                do 
                {
                        strcpy(commands[command_count], fd.cFileName);
@@ -420,7 +435,7 @@ void WriteCompileCommands()
                        printf("        %s\n", commands[command_count]);
                        ++command_count;
                } while(FindNextFileA(fh, &fd));
-               sc(TNORMAL);
+               std::cout << con_reset;
        }
        
        // Write our spiffy new makefile :D
@@ -476,10 +491,10 @@ void WriteCompileModules(const vector<string> &includes, const vector<string> &l
        WIN32_FIND_DATAA fd;
        HANDLE fh = FindFirstFileA("..\\src\\modules\\m_*.cpp", &fd);
        if(fh == INVALID_HANDLE_VALUE)
-               printf_c("\033[1;32m  No module sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
+               std::cout << con_green << "  No module sources could be found! This *could* be a bad thing.. :P" << con_reset << std::endl;
        else
        {
-               sc(TGREEN);
+               std::cout << con_green;
                do 
                {
                        strcpy(modules[module_count], fd.cFileName);
@@ -487,7 +502,7 @@ void WriteCompileModules(const vector<string> &includes, const vector<string> &l
                        printf("  %s\n", modules[module_count]);
                        ++module_count;
                } while(FindNextFileA(fh, &fd));
-               sc(TNORMAL);
+               std::cout << con_reset;
        }
        
        string extra_include, extra_lib;
index 5e1fd897d076b0155e28a3fbf5eefd3677a020e2..df1175712495b82887e13a790d5bab8cd9912614 100644 (file)
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
   </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="colors.h" />\r
-  </ItemGroup>\r
   <ItemGroup>\r
     <ClCompile Include="configure.cpp" />\r
   </ItemGroup>\r
index c4901cdf17e6d285ee8a4db598cdb024e969383e..3087a966d11cc5ee8c65578e883c5796611932d9 100644 (file)
@@ -338,6 +338,7 @@ nmake -f modules.mak
     <ClInclude Include="..\include\channels.h" />
     <ClInclude Include="..\include\command_parse.h" />
     <ClInclude Include="..\include\configreader.h" />
+    <ClInclude Include="..\include\consolecolors.h" />
     <ClInclude Include="..\include\ctables.h" />
     <ClInclude Include="..\include\cull_list.h" />
     <ClInclude Include="..\include\dns.h" />
@@ -370,7 +371,6 @@ nmake -f modules.mak
     <ClInclude Include="..\include\u_listmode.h" />
     <ClInclude Include="..\include\wildcard.h" />
     <ClInclude Include="..\include\xline.h" />
-    <ClInclude Include="colors.h" />
     <ClInclude Include="inspircd_win32wrapper.h" />
     <ClInclude Include="win32service.h" />
   </ItemGroup>
index 26d1548986b7745399c607f24fe8fb92ec7e0d61..a451dd0df362908f2c8f607ec60a218ef53fd9b1 100644 (file)
 #include "inspircd_win32wrapper.h"
 #include "inspircd.h"
 #include "configreader.h"
-#include "colors.h"
 #include <string>
 #include <errno.h>
 #include <assert.h>
-#include <mmsystem.h>
-#pragma comment(lib, "Winmm.lib")
 
 CoreExport const char *insp_inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
 {
index 1f9936caf20e5f5d033cb57c8609376621fd2212..d60276b88fb5d3d73ab35c9b0882b24533f2287c 100644 (file)
@@ -106,9 +106,6 @@ __inline int inet_aton(const char *cp, struct in_addr *addr)
        return (addr->s_addr == INADDR_NONE) ? 0 : 1;
 };
 
-/* Handles colors in printf */
-int printf_c(const char * format, ...);
-
 /* getopt() wrapper */
 #define no_argument            0
 #define required_argument      1
index b677b6662e5d28cf6296a0683028f976a3b42569..81f8e7516e6f6becb85df2f1451900ba44bf8291 100644 (file)
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
+#include <iostream>
 
 static SERVICE_STATUS_HANDLE serviceStatusHandle;
 static HANDLE hThreadEvent;
@@ -244,7 +245,7 @@ void InstallService()
        scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
        if (!scm)
        {
-               printf("Unable to open service control manager: %s\n", RetrieveLastError());
+               std::cout << "Unable to open service control manager: " << RetrieveLastError() << std::endl;
                return;
        }
 
@@ -253,7 +254,7 @@ void InstallService()
 
        if (!myService)
        {
-               printf("Unable to create service: %s\n", RetrieveLastError());
+               std::cout << "Unable to create service: " << RetrieveLastError() << std::endl;
                CloseServiceHandle(scm);
                return;
        }
@@ -274,7 +275,7 @@ void InstallService()
                        BOOL success = ChangeServiceConf(myService,SERVICE_CONFIG_DESCRIPTION, &svDesc);
                        if (!success)
                        {
-                               printf("Unable to set service description: %s\n", RetrieveLastError());
+                               std::cout << "Unable to set service description: " << RetrieveLastError() << std::endl;
                                CloseServiceHandle(myService);
                                CloseServiceHandle(scm);
                                return;
@@ -283,7 +284,7 @@ void InstallService()
                FreeLibrary(advapi32);
        }
 
-       printf("Service installed.\n");
+       std::cout << "Service installed." << std::endl;
        CloseServiceHandle(myService);
        CloseServiceHandle(scm);
 }
@@ -296,27 +297,27 @@ void RemoveService()
        scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
        if (!scm)
        {
-               printf("Unable to open service control manager: %s\n", RetrieveLastError());
+               std::cout << "Unable to open service control manager: " << RetrieveLastError() << std::endl;
                return;
        }
 
        myService = OpenService(scm,TEXT("InspIRCd"),SERVICE_ALL_ACCESS);
        if (!myService)
        {
-               printf("Unable to open service: %s\n", RetrieveLastError());
+               std::cout << "Unable to open service: " << RetrieveLastError() << std::endl;
                CloseServiceHandle(scm);
                return;
        }
 
        if (!DeleteService(myService))
        {
-               printf("Unable to delete service: %s\n", RetrieveLastError());
+               std::cout << "Unable to delete service: " << RetrieveLastError() << std::endl;
                CloseServiceHandle(myService);
                CloseServiceHandle(scm);
                return;
        }
 
-       printf("Service removed.\n");
+       std::cout << "Service removed." << std::endl;
        CloseServiceHandle(myService);
        CloseServiceHandle(scm);
 }