diff options
Diffstat (limited to 'src/main.cpp')
-rwxr-xr-x | src/main.cpp | 384 |
1 files changed, 138 insertions, 246 deletions
diff --git a/src/main.cpp b/src/main.cpp index 5a1204d..1b6285a 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,105 +17,28 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "MainWindow.h" - -#include "UiGuiIndentServer.h" -#include "debugging/TSLogger.h" -#include "UiGuiIniFileParser.h" -#include "UiGuiSettings.h" -#include "UiGuiVersion.h" -#include "UiGuiSystemInfo.h" -#include "IndentHandler.h" -#include "SettingsPaths.h" - -#include <tntqapplication.h> -#include <tntqtextcodec.h> -#include <tqdebug.h> - -#include <string> -#include <iostream> -#include <algorithm> -#include <tclap/CmdLine.h> - -#ifdef _MSC_VER - -#include <windows.h> -#include <direct.h> -#include <stdlib.h> -#include <stdio.h> -#include <fcntl.h> -#include <io.h> -#include <iostream> -#include <fstream> - -/** - \brief Calling this function tries to attach to the console of the parent process and - redirect all inputs and outputs from and to this console. - - The redirected streams are stdout, stdin, stderr, cout, wcout, cin, wcin, wcerr, cerr, wclog and clog. - - Code based on info from http://dslweb.nwnexus.com/~ast/dload/guicon.htm. - */ -bool attachToConsole(/*enum ATTACH_ONLY|TRY_ATTACH_ELSE_CREATE|CREATE_NEW*/) -{ - int hConHandle; - long lStdHandle; - CONSOLE_SCREEN_BUFFER_INFO coninfo; - FILE *fp; - - // Trying to attach to the console of the parent process. - BOOL successful = AttachConsole(ATTACH_PARENT_PROCESS); - // In case that the parent process has no console return false and do no input/output redirection. - if ( !successful ) - return false; - - // Set the screen buffer to be big enough to let us scroll text - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); - // Set maximum console lines. - coninfo.dwSize.Y = 500; - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); - - // Redirect unbuffered STDOUT to the console. - lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - if ( hConHandle != -1 ) { - fp = _fdopen( hConHandle, "w" ); - *stdout = *fp; - setvbuf( stdout, NULL, _IONBF, 0 ); - } - - // Redirect unbuffered STDIN to the console. - lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - if ( hConHandle != -1 ) { - fp = _fdopen( hConHandle, "r" ); - *stdin = *fp; - setvbuf( stdin, NULL, _IONBF, 0 ); - } - - // Redirect unbuffered STDERR to the console. - lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - if ( hConHandle != -1 ) { - fp = _fdopen( hConHandle, "w" ); - *stderr = *fp; - setvbuf( stderr, NULL, _IONBF, 0 ); - } - - // Make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog point to console as well. - std::ios::sync_with_stdio(); - - return true; -} -#else -bool attachToConsole() -{ - return false; -} - -#endif - -using namespace tschweitzer::debugging; +// -- #include "MainWindow.h" +// -- +// -- #include "UiGuiIndentServer.h" +// -- #include "debugging/TSLogger.h" +// -- #include "UiGuiIniFileParser.h" +// -- #include "UiGuiSettings.h" +// -- #include "UiGuiVersion.h" +// -- #include "UiGuiSystemInfo.h" +// -- #include "IndentHandler.h" +// -- #include "SettingsPaths.h" +// -- +// -- #include <tntqapplication.h> +// -- #include <tntqtextcodec.h> +// -- #include <tqdebug.h> + +// -- #include <string> +// -- #include <iostream> +// -- #include <algorithm> +// -- #include <tclap/CmdLine.h> + + +// -- using namespace tschweitzer::debugging; /*! /brief Entry point to UniversalIndentGUI application. @@ -128,152 +51,121 @@ using namespace tschweitzer::debugging; If -p and -s are set, -p will be used. -v --verbose needs a following parameter defining the verbose level as a number from 0 to 3. */ -int main(int argc, char *argv[]) { - TQString file2OpenOnStart = ""; - int verboseLevel = 1; - bool startAsPlugin = false; - bool startAsServer = false; - bool tclapExitExceptionThrown = false; - int returnValue = 0; - - bool attachedToConsole = false; - attachedToConsole = attachToConsole(); - -#ifdef __APPLE__ - // Filter out -psn_0_118813 and similar parameters. - std::vector<char*> argList; - for ( int i = 0; i < argc; i++ ) { - TQString argString(argv[i]); - - if ( argString.startsWith("-psn_") == false ) { - argList.push_back(argv[i]); - } - else { -// std::cerr << std::endl << "The parameter "<< i << " is an invalid finder parameter. Parameter was " << argv[i] << std::endl; - } - } - for ( size_t i = 0; i < argList.size(); i++ ) { - argv[i] = argList.at(i); - } - argc = argList.size(); -#endif - - // Wrap everything in a try block. Do this every time, - // because exceptions will be thrown for problems. - try { - // Define the command line object. - TCLAP::CmdLine cmd("If -p and -s are set, -p will be used.\nGiving no parameters starts full gui without server.", ' ', "UiGUI version " PROGRAM_VERSION_STRING " " PROGRAM_REVISION); - cmd.setExceptionHandling(false); - - // Define a value argument and add it to the command line. - TCLAP::UnlabeledValueArg<std::string> filenameArg("file", "Opens the by filename defined file on start" , false, "", "filename"); - cmd.add( filenameArg ); - - // Define a switch and add it to the command line. - TCLAP::SwitchArg pluginSwitch("p", "plugin", "Run as plugin. Server will be started with a simplified gui", false); - cmd.add( pluginSwitch ); - - // Define a switch and add it to the command line. - TCLAP::SwitchArg serverSwitch("s", "server", "Run as server only without gui", false); - cmd.add( serverSwitch ); - - // Define a value argument and add it to the command line. - TCLAP::ValueArg<int> verboselevelArg("v", "verbose", "Sets how many info is written to the log. 0 means with debug info, 3 means critical messages only" , false, 1, "int"); - cmd.add( verboselevelArg ); - - // Parse the args. - cmd.parse( argc, argv ); - - // Get the value parsed by each arg. - file2OpenOnStart = filenameArg.getValue().c_str(); - startAsPlugin = pluginSwitch.getValue(); - startAsServer = serverSwitch.getValue(); - verboseLevel = verboselevelArg.getValue(); - } - catch (TCLAP::ArgException &e) { // catch arg exceptions - std::cerr << std::endl << "error: " << e.error() << ". " << e.argId() << std::endl; - returnValue = 1; - } - catch (TCLAP::ExitException &e) { // catch exit exceptions - tclapExitExceptionThrown = true; - returnValue = e.getExitStatus(); - } - catch (...) { // catch any exceptions - std::cerr << std::endl << "There was an error! Maybe faulty command line arguments set. See --help." << std::endl; - returnValue = 1; - } - - if ( returnValue != 0 || tclapExitExceptionThrown ) { -#ifdef _MSC_VER - if ( attachedToConsole ) { - // Workaround for skipped command line prompt: Get the current working directory and print it to console. - char* buffer; - if( (buffer = _getcwd( NULL, 0 )) != NULL ) { - std::cerr << std::endl << buffer << ">"; - free(buffer); - } - // Release the connection to the parents console. - FreeConsole(); - } -#endif - return returnValue; - } - - TQApplication app(argc, argv); - UiGuiIndentServer server; - MainWindow *mainWindow = NULL; - IndentHandler *indentHandler = NULL; - - // Init and install the logger function. - // Setting UTF-8 as default 8-Bit encoding to ensure that tqDebug does no false string conversion. - TQTextCodec::setCodecForCStrings( TQTextCodec::codecForName("UTF-8") ); - TQTextCodec::setCodecForLocale( TQTextCodec::codecForName("UTF-8") ); - // Force creation of an TSLogger instance here, to avoid recursion with SettingsPaths init function. -#ifdef _DEBUG - TSLogger::getInstance(0); -#else - TSLogger::getInstance(verboseLevel); -#endif - qInstallMsgHandler( TSLogger::messageHandler ); - TSLogger::messageHandler( TSLoggerInfoMsg, TQString("Starting UiGUI Version %1 %2").arg(PROGRAM_VERSION_STRING).arg(PROGRAM_REVISION).toAscii() ); - TSLogger::messageHandler( TSLoggerInfoMsg, TQString("Running on %1").arg(UiGuiSystemInfo::getOperatingSystem()).toAscii() ); - - // Set default values for all by UniversalIndentGUI used settings objects. - TQCoreApplication::setOrganizationName("UniversalIndentGUI"); - TQCoreApplication::setOrganizationDomain("universalindent.sf.net"); - TQCoreApplication::setApplicationName("UniversalIndentGUI"); - - // Start normal with full gui and without server. - if ( !startAsPlugin && !startAsServer ) { - mainWindow = new MainWindow(file2OpenOnStart); - mainWindow->show(); - } - // Start as plugin with server. - else if ( startAsPlugin ) { - server.startServer(); - indentHandler = new IndentHandler(0); - indentHandler->show(); - } - // Start as server only without any gui. - else if ( startAsServer ) { - server.startServer(); - } - - try { - returnValue = app.exec(); - } - catch (std::exception &ex) { - qCritical() << __LINE__ << " " << __FUNCTION__ << ": Something went terribly wrong:" << ex.what(); - } - - if ( startAsPlugin || startAsServer ) - server.stopServer(); - - delete indentHandler; - delete mainWindow; - - SettingsPaths::cleanAndRemoveTempDir(); - TSLogger::deleteInstance(); +int main(int argc, char *argv[]) +{ + return 0; +// -- TQString file2OpenOnStart = ""; +// -- int verboseLevel = 1; +// -- bool startAsPlugin = false; +// -- bool startAsServer = false; +// -- bool tclapExitExceptionThrown = false; +// -- int returnValue = 0; +// -- +// -- // Wrap everything in a try block. Do this every time, +// -- // because exceptions will be thrown for problems. +// -- try { +// -- // Define the command line object. +// -- TCLAP::CmdLine cmd("If -p and -s are set, -p will be used.\nGiving no parameters starts full gui without server.", ' ', "UiGUI version " PROGRAM_VERSION_STRING " " PROGRAM_REVISION); +// -- cmd.setExceptionHandling(false); +// -- +// -- // Define a value argument and add it to the command line. +// -- TCLAP::UnlabeledValueArg<std::string> filenameArg("file", "Opens the by filename defined file on start" , false, "", "filename"); +// -- cmd.add( filenameArg ); +// -- +// -- // Define a switch and add it to the command line. +// -- TCLAP::SwitchArg pluginSwitch("p", "plugin", "Run as plugin. Server will be started with a simplified gui", false); +// -- cmd.add( pluginSwitch ); +// -- +// -- // Define a switch and add it to the command line. +// -- TCLAP::SwitchArg serverSwitch("s", "server", "Run as server only without gui", false); +// -- cmd.add( serverSwitch ); +// -- +// -- // Define a value argument and add it to the command line. +// -- TCLAP::ValueArg<int> verboselevelArg("v", "verbose", "Sets how many info is written to the log. 0 means with debug info, 3 means critical messages only" , false, 1, "int"); +// -- cmd.add( verboselevelArg ); +// -- +// -- // Parse the args. +// -- cmd.parse( argc, argv ); +// -- +// -- // Get the value parsed by each arg. +// -- file2OpenOnStart = filenameArg.getValue().c_str(); +// -- startAsPlugin = pluginSwitch.getValue(); +// -- startAsServer = serverSwitch.getValue(); +// -- verboseLevel = verboselevelArg.getValue(); +// -- } +// -- catch (TCLAP::ArgException &e) { // catch arg exceptions +// -- std::cerr << std::endl << "error: " << e.error() << ". " << e.argId() << std::endl; +// -- returnValue = 1; +// -- } +// -- catch (TCLAP::ExitException &e) { // catch exit exceptions +// -- tclapExitExceptionThrown = true; +// -- returnValue = e.getExitStatus(); +// -- } +// -- catch (...) { // catch any exceptions +// -- std::cerr << std::endl << "There was an error! Maybe faulty command line arguments set. See --help." << std::endl; +// -- returnValue = 1; +// -- } +// -- +// -- if ( returnValue != 0 || tclapExitExceptionThrown ) { +// -- return returnValue; +// -- } +// -- +// -- TQApplication app(argc, argv); +// -- UiGuiIndentServer server; +// -- MainWindow *mainWindow = NULL; +// -- IndentHandler *indentHandler = NULL; +// -- +// -- // Init and install the logger function. +// -- // Setting UTF-8 as default 8-Bit encoding to ensure that tqDebug does no false string conversion. +// -- TQTextCodec::setCodecForCStrings( TQTextCodec::codecForName("UTF-8") ); +// -- TQTextCodec::setCodecForLocale( TQTextCodec::codecForName("UTF-8") ); +// -- // Force creation of an TSLogger instance here, to avoid recursion with SettingsPaths init function. +// -- #ifdef _DEBUG +// -- TSLogger::getInstance(0); +// -- #else +// -- TSLogger::getInstance(verboseLevel); +// -- #endif +// -- qInstallMsgHandler( TSLogger::messageHandler ); +// -- TSLogger::messageHandler( TSLoggerInfoMsg, TQString("Starting UiGUI Version %1 %2").arg(PROGRAM_VERSION_STRING).arg(PROGRAM_REVISION).toAscii() ); +// -- TSLogger::messageHandler( TSLoggerInfoMsg, TQString("Running on %1").arg(UiGuiSystemInfo::getOperatingSystem()).toAscii() ); +// -- +// -- // Set default values for all by UniversalIndentGUI used settings objects. +// -- TQCoreApplication::setOrganizationName("UniversalIndentGUI"); +// -- TQCoreApplication::setOrganizationDomain("universalindent.sf.net"); +// -- TQCoreApplication::setApplicationName("UniversalIndentGUI"); +// -- +// -- // Start normal with full gui and without server. +// -- if ( !startAsPlugin && !startAsServer ) { +// -- mainWindow = new MainWindow(file2OpenOnStart); +// -- mainWindow->show(); +// -- } +// -- // Start as plugin with server. +// -- else if ( startAsPlugin ) { +// -- server.startServer(); +// -- indentHandler = new IndentHandler(0); +// -- indentHandler->show(); +// -- } +// -- // Start as server only without any gui. +// -- else if ( startAsServer ) { +// -- server.startServer(); +// -- } +// -- +// -- try { +// -- returnValue = app.exec(); +// -- } +// -- catch (std::exception &ex) { +// -- qCritical() << __LINE__ << " " << __FUNCTION__ << ": Something went terribly wrong:" << ex.what(); +// -- } +// -- +// -- if ( startAsPlugin || startAsServer ) +// -- server.stopServer(); +// -- +// -- delete indentHandler; +// -- delete mainWindow; +// -- +// -- SettingsPaths::cleanAndRemoveTempDir(); +// -- TSLogger::deleteInstance(); +// -- +// -- return returnValue; - return returnValue; } |