int main(int argc, char **argv) { IT_IT("main - SQLSERVER"); int stat = -1; char version[100]; //version control/////////////////////////////////////////////////////////////// sprintf(version, "sqlserver.exe - Build: %s %s at enscada.com",__DATE__,__TIME__); fprintf(stdout, "%s\n", version); SYSTEMTIME oT; ::GetLocalTime(&oT); fprintf(stdout,"%02d/%02d/%04d, %02d:%02d:%02d Starting ... %s\n",oT.wMonth,oT.wDay,oT.wYear,oT.wHour,oT.wMinute,oT.wSecond,SYSTEM_NAME_HISTOR_SERVER); fflush(stdout); if(!IsSingleInstance(""SYSTEM_NAME_HISTOR_SERVER"")) { IT_COMMENT("Another instance of the Historical sql server is already running!");//error message return stat; } // // if the DISPLAY variable is empty or not set then we go into none-GUI mode // this application can run GUI mode or non-GUI mode // it is expected that the GUI mode is started when we want to do debugging // #ifdef UNIX bool useGUI = (getenv( "DISPLAY" ) != 0) && (strlen(getenv( "DISPLAY" )) > 0); // // if(!useGUI) { setenv("DISPLAY","localhost:0",1); }; // QApplication a(argc, argv,useGUI); #else QApplication a(argc, argv); #endif // // connect to the databases uid = 0 for root //if(getuid() > QS_MIN_UID) { //signal(SIGTERM,SigTermHandler); SqlServer sqlsrv; sqlsrv.run(argc, argv); stat = a.exec(); ///////////////////wait termination stuff/////////////////// //dbMutex mutex; //dbCriticalSection cs(mutex); //sqlsrv.TerminationEvent.open(); //sqlsrv.TerminationEvent.wait(mutex); //sqlsrv.TerminationEvent.close(); } return stat; }
bool CodeLiteApp::OnInit() { // Set the log file verbosity FileLogger::OpenLog("codelite.log", clConfig::Get().Read("LogVerbosity", FileLogger::Error)); CL_DEBUG(wxT("Starting codelite...")); #if defined(__WXGTK__) || defined(__WXMAC__) // block signal pipe sigset_t mask_set; sigemptyset(&mask_set); sigaddset(&mask_set, SIGPIPE); sigprocmask(SIG_SETMASK, &mask_set, NULL); // Handle sigchld CodeLiteBlockSigChild(); #ifdef __WXGTK__ // Insall signal handlers signal(SIGSEGV, WaitForDebugger); signal(SIGABRT, WaitForDebugger); #endif #endif wxSocketBase::Initialize(); // #if wxUSE_ON_FATAL_EXCEPTION // //trun on fatal exceptions handler // wxHandleFatalExceptions(true); // #endif #ifdef __WXMSW__ // as described in http://jrfonseca.dyndns.org/projects/gnu-win32/software/drmingw/ // load the exception handler dll so we will get Dr MinGW at runtime m_handler = LoadLibrary(wxT("exchndl.dll")); // Enable this process debugging priviliges // EnableDebugPriv(); #endif #ifdef USE_POSIX_LAYOUT wxStandardPaths::Get().IgnoreAppSubDir("bin"); #endif // Init resources and add the PNG handler wxSystemOptions::SetOption(_T("msw.remap"), 0); wxSystemOptions::SetOption("msw.notebook.themed-background", 0); wxXmlResource::Get()->InitAllHandlers(); wxImage::AddHandler(new wxPNGHandler); wxImage::AddHandler(new wxCURHandler); wxImage::AddHandler(new wxICOHandler); wxImage::AddHandler(new wxXPMHandler); wxImage::AddHandler(new wxGIFHandler); InitXmlResource(); wxLog::EnableLogging(false); wxString homeDir(wxEmptyString); // parse command line wxCmdLineParser parser; parser.SetDesc(cmdLineDesc); parser.SetCmdLine(wxAppBase::argc, wxAppBase::argv); if(parser.Parse() != 0) { return false; } if(parser.Found(wxT("h"))) { // print usage parser.Usage(); return false; } if(parser.Found(wxT("v"))) { // print version #ifdef __WXMSW__ ::wxMessageBox(wxString() << "CodeLite IDE v" << clGitRevision, "CodeLite"); #else wxPrintf("CodeLite IDE v%s\n", clGitRevision); #endif return false; } if(parser.Found(wxT("n"))) { // Load codelite without plugins SetPluginLoadPolicy(PP_None); } wxString plugins; if(parser.Found(wxT("p"), &plugins)) { wxArrayString pluginsArr = ::wxStringTokenize(plugins, wxT(",")); // Trim and make lower case for(size_t i = 0; i < pluginsArr.GetCount(); i++) { pluginsArr.Item(i).Trim().Trim(false).MakeLower(); } // Load codelite without plugins SetAllowedPlugins(pluginsArr); SetPluginLoadPolicy(PP_FromList); } wxString newBaseDir(wxEmptyString); if(parser.Found(wxT("b"), &newBaseDir)) { #if defined(__WXMSW__) homeDir = newBaseDir; #else wxLogDebug("Ignoring the Windows-only --basedir option as not running Windows"); #endif } wxString newDataDir(wxEmptyString); if(parser.Found(wxT("d"), &newDataDir)) { clStandardPaths::Get().SetUserDataDir(newDataDir); } // Copy gdb pretty printers from the installation folder to a writeable location // this is needed because python complies the files and in most cases the user // running codelite has no write permissions to /usr/share/codelite/... DoCopyGdbPrinters(); // Since GCC 4.8.2 gcc has a default colored output // which breaks codelite output parsing // to disable this, we need to set GCC_COLORS to an empty // string. // https://sourceforge.net/p/codelite/bugs/946/ // http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html ::wxSetEnv("GCC_COLORS", ""); #if defined(__WXGTK__) if(homeDir.IsEmpty()) { SetAppName(wxT("codelite")); homeDir = clStandardPaths::Get() .GetUserDataDir(); // By default, ~/Library/Application Support/codelite or ~/.codelite if(!wxFileName::Exists(homeDir)) { wxLogNull noLog; wxFileName::Mkdir(homeDir, wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); wxCHECK_MSG(wxFileName::DirExists(homeDir), false, "Failed to create the requested data dir"); } // Create the directory structure wxLogNull noLog; wxMkdir(homeDir); wxMkdir(homeDir + wxT("/lexers/")); wxMkdir(homeDir + wxT("/rc/")); wxMkdir(homeDir + wxT("/images/")); wxMkdir(homeDir + wxT("/templates/")); wxMkdir(homeDir + wxT("/config/")); wxMkdir(homeDir + wxT("/tabgroups/")); // copy the settings from the global location if needed wxString installPath(INSTALL_DIR, wxConvUTF8); if(!CopySettings(homeDir, installPath)) return false; ManagerST::Get()->SetInstallDir(installPath); } else { wxFileName fn(homeDir); fn.MakeAbsolute(); ManagerST::Get()->SetInstallDir(fn.GetFullPath()); } #elif defined(__WXMAC__) SetAppName(wxT("codelite")); homeDir = clStandardPaths::Get().GetUserDataDir(); if(!wxFileName::Exists(homeDir)) { wxLogNull noLog; wxFileName::Mkdir(homeDir, wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); wxCHECK_MSG(wxFileName::DirExists(homeDir), false, "Failed to create the requested data dir"); } { wxLogNull noLog; // Create the directory structure wxMkdir(homeDir); wxMkdir(homeDir + wxT("/lexers/")); wxMkdir(homeDir + wxT("/rc/")); wxMkdir(homeDir + wxT("/images/")); wxMkdir(homeDir + wxT("/templates/")); wxMkdir(homeDir + wxT("/config/")); wxMkdir(homeDir + wxT("/tabgroups/")); } wxString installPath(MacGetBasePath()); ManagerST::Get()->SetInstallDir(installPath); // copy the settings from the global location if needed CopySettings(homeDir, installPath); #else //__WXMSW__ if(homeDir.IsEmpty()) { // did we got a basedir from user? # ifdef USE_POSIX_LAYOUT homeDir = wxStandardPaths::Get().GetDataDir() + wxT(INSTALL_DIR); # else homeDir = ::wxGetCwd(); # endif } wxFileName fnHomdDir(homeDir + wxT("/")); // try to locate the menu/rc.xrc file wxFileName fn(homeDir + wxT("/rc"), wxT("menu.xrc")); if(!fn.FileExists()) { // we got wrong home directory wxFileName appFn(wxAppBase::argv[0]); homeDir = appFn.GetPath(); } if(fnHomdDir.IsRelative()) { fnHomdDir.MakeAbsolute(); homeDir = fnHomdDir.GetPath(); } ManagerST::Get()->SetInstallDir(homeDir); #endif // Update codelite revision and Version EditorConfigST::Get()->Init(clGitRevision, wxT("2.0.2")); // Make sure we have an instance if the keyboard manager allocated before we create the main frame class // (the keyboard manager needs to connect to the main frame events) clKeyboardManager::Get(); ManagerST::Get()->SetOriginalCwd(wxGetCwd()); ::wxSetWorkingDirectory(homeDir); // Load all of the XRC files that will be used. You can put everything // into one giant XRC file if you wanted, but then they become more // diffcult to manage, and harder to reuse in later projects. // The menubar if(!wxXmlResource::Get()->Load(DoFindMenuFile(ManagerST::Get()->GetInstallDir(), wxT("2.0")))) return false; // keep the startup directory ManagerST::Get()->SetStartupDirectory(::wxGetCwd()); // set the performance output file name PERF_OUTPUT(wxString::Format(wxT("%s/codelite.perf"), wxGetCwd().c_str()).mb_str(wxConvUTF8)); // Initialize the configuration file locater ConfFileLocator::Instance()->Initialize(ManagerST::Get()->GetInstallDir(), ManagerST::Get()->GetStartupDirectory()); Manager* mgr = ManagerST::Get(); // set the CTAGS_REPLACEMENT environment variable wxSetEnv(wxT("CTAGS_REPLACEMENTS"), ManagerST::Get()->GetStartupDirectory() + wxT("/ctags.replacements")); long style = wxSIMPLE_BORDER; #if defined(__WXMSW__) || defined(__WXGTK__) style |= wxFRAME_NO_TASKBAR; #else // Mac wxUnusedVar(style); #endif // read the last frame size from the configuration file // Initialise editor configuration files #ifdef __WXMSW__ { wxLogNull noLog; wxFileName::Mkdir(clStandardPaths::Get().GetUserDataDir(), wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); } #endif EditorConfigST::Get()->SetInstallDir(mgr->GetInstallDir()); EditorConfig* cfg = EditorConfigST::Get(); if(!cfg->Load()) { CL_ERROR(wxT("Failed to load configuration file: %s/config/codelite.xml"), wxGetCwd().c_str()); return false; } ColoursAndFontsManager::Get().Load(); #ifdef __WXGTK__ bool redirect = clConfig::Get().Read("RedirectLogOutput", true); if(redirect) { // Redirect stdout/error to a file wxFileName stdout_err(clStandardPaths::Get().GetUserDataDir(), "codelite-stdout-stderr.log"); FILE* new_stdout = ::freopen(stdout_err.GetFullPath().mb_str(wxConvISO8859_1).data(), "a+b", stdout); FILE* new_stderr = ::freopen(stdout_err.GetFullPath().mb_str(wxConvISO8859_1).data(), "a+b", stderr); wxUnusedVar(new_stderr); wxUnusedVar(new_stdout); } #endif // check for single instance if(!IsSingleInstance(parser, ManagerST::Get()->GetOriginalCwd())) { return false; } //--------------------------------------------------------- // Set environment variable for CodeLiteDir (make it first // on the list so it can be used by other variables) //--------------------------------------------------------- EvnVarList vars; EnvironmentConfig::Instance()->Load(); EnvironmentConfig::Instance()->ReadObject(wxT("Variables"), &vars); vars.InsertVariable(wxT("Default"), wxT("CodeLiteDir"), ManagerST::Get()->GetInstallDir()); EnvironmentConfig::Instance()->WriteObject(wxT("Variables"), &vars); //--------------------------------------------------------- #ifdef __WXMSW__ // Read registry values MSWReadRegistry(); #endif GeneralInfo inf; cfg->ReadObject(wxT("GeneralInfo"), &inf); // Set up the locale if appropriate if(EditorConfigST::Get()->GetOptions()->GetUseLocale()) { int preferredLocale = wxLANGUAGE_ENGLISH; // The locale had to be saved as the canonical locale name, as the wxLanguage enum wasn't consistent between wx // versions wxString preferredLocalename = EditorConfigST::Get()->GetOptions()->GetPreferredLocale(); if(!preferredLocalename.IsEmpty()) { const wxLanguageInfo* info = wxLocale::FindLanguageInfo(preferredLocalename); if(info) { preferredLocale = info->Language; if(preferredLocale == wxLANGUAGE_UNKNOWN) { preferredLocale = wxLANGUAGE_ENGLISH; } } } #if defined(__WXGTK__) // Cater for a --prefix= build. This gets added automatically to the search path for catalogues. // So hack in the standard ones too, otherwise wxstd.mo will be missed wxLocale::AddCatalogLookupPathPrefix(wxT("/usr/share/locale")); wxLocale::AddCatalogLookupPathPrefix(wxT("/usr/local/share/locale")); #elif defined(__WXMSW__) # ifdef USE_POSIX_LAYOUT wxLocale::AddCatalogLookupPathPrefix(wxStandardPaths::Get().GetDataDir() + wxT("/share/locale")); # else wxLocale::AddCatalogLookupPathPrefix(ManagerST::Get()->GetInstallDir() + wxT("\\locale")); # endif #endif // This has to be done before the catalogues are added, as otherwise the wrong one (or none) will be found m_locale.Init(preferredLocale); bool codelitemo_found = m_locale.AddCatalog(wxT("codelite")); if(!codelitemo_found) { m_locale.AddCatalog(wxT("CodeLite")); // Hedge bets re our spelling } if(!codelitemo_found) { // I wanted to 'un-init' the locale if no translations were found // as otherwise, in a RTL locale, menus, dialogs etc will be displayed RTL, in English... // However I couldn't find a way to do this } } // Append the binary's dir to $PATH. This makes codelite-cc available even for a --prefix= installation #if defined(__WXMSW__) wxChar pathsep(wxT(';')); #else wxChar pathsep(wxT(':')); #endif wxString oldpath; wxGetEnv(wxT("PATH"), &oldpath); wxFileName execfpath(wxStandardPaths::Get().GetExecutablePath()); wxSetEnv(wxT("PATH"), oldpath + pathsep + execfpath.GetPath()); wxString newpath; wxGetEnv(wxT("PATH"), &newpath); // If running under Cygwin terminal, adjust the environment variables AdjustPathForCygwinIfNeeded(); // If running under Cygwin terminal, adjust the environment variables AdjustPathForMSYSIfNeeded(); // Create the main application window clMainFrame::Initialize(parser.GetParamCount() == 0); m_pMainFrame = clMainFrame::Get(); m_pMainFrame->Show(TRUE); SetTopWindow(m_pMainFrame); long lineNumber(0); parser.Found(wxT("l"), &lineNumber); if(lineNumber > 0) { lineNumber--; } else { lineNumber = 0; } for(size_t i = 0; i < parser.GetParamCount(); i++) { wxString argument = parser.GetParam(i); // convert to full path and open it wxFileName fn(argument); fn.MakeAbsolute(ManagerST::Get()->GetOriginalCwd()); if(fn.GetExt() == wxT("workspace")) { ManagerST::Get()->OpenWorkspace(fn.GetFullPath()); } else { clMainFrame::Get()->GetMainBook()->OpenFile(fn.GetFullPath(), wxEmptyString, lineNumber); } } wxLogMessage(wxString::Format(wxT("Install path: %s"), ManagerST::Get()->GetInstallDir().c_str())); wxLogMessage(wxString::Format(wxT("Startup Path: %s"), ManagerST::Get()->GetStartupDirectory().c_str())); #ifdef __WXGTK__ // Needed on GTK if(clMainFrame::Get()->GetMainBook()->GetActiveEditor() == NULL) { clMainFrame::Get()->GetOutputPane()->GetBuildTab()->SetFocus(); } #endif // Especially with the OutputView open, CodeLite was consuming 50% of a cpu, mostly in updateui // The next line limits the frequency of UpdateUI events to every 100ms wxUpdateUIEvent::SetUpdateInterval(100); return TRUE; }
int main(int argc, char **argv) { char version[100]; int c; char OPCServerAddress[80]; char OpcServerProgID[80]; char OpcUpdateRate[80]; char OpcPercentDeadband[80]; char OpcclassId[80]; DWORD len; char OldConsoleTitle[500]; char NewConsoleTitle[500]; char line_number[80]; IT_IT("main OPC CLIENT DA"); //version control/////////////////////////////////////////////////////////////// sprintf(version, ""APPLICATION" - Built on %s %s %s",__DATE__,__TIME__,SUPPLIER); fprintf(stderr, "%s\n", version); fflush(stderr); IT_COMMENT(version); //////////////////////////////////////////////////////////////////////////////// OPCServerAddress[0] = '\0'; OpcServerProgID[0] = '\0'; OpcUpdateRate[0] = '\0'; OpcPercentDeadband[0] = '\0'; OpcclassId[0] = '\0'; OldConsoleTitle[0] = '\0'; NewConsoleTitle[0] = '\0'; line_number[0] = '\0'; while( ( c = getopt ( argc, argv, "a:p:q:l:t:?" )) != EOF ) { switch ( c ) { case 'a' : strcpy(OPCServerAddress, optarg); strcat(NewConsoleTitle, optarg); strcat(NewConsoleTitle, " "); break; case 'p' : strcpy(OpcServerProgID, optarg); strcat(NewConsoleTitle, optarg); strcat(NewConsoleTitle, " "); break; case 'q' : strcpy(OpcclassId, optarg); strcat(NewConsoleTitle, optarg); strcat(NewConsoleTitle, " "); break; case 'l' : strcpy(line_number, optarg); strcat(NewConsoleTitle, optarg); strcat(NewConsoleTitle, " "); break; case 't' : strcpy(OpcUpdateRate, optarg); strcat(NewConsoleTitle, optarg); strcat(NewConsoleTitle, " "); break; case '?' : fprintf(stderr, RUNTIME_USAGE, argv[0]); fflush(stderr); IT_EXIT; return EXIT_FAILURE; } } if(argc < 2) { usage(argv); IT_EXIT; return EXIT_FAILURE; } if(strlen(OPCServerAddress) == 0) { fprintf(stderr,"OPC server IP address not known\n"); fflush(stderr); IT_EXIT; return EXIT_FAILURE; } if((len = GetConsoleTitle(OldConsoleTitle, sizeof(OldConsoleTitle))) > 0) { SetConsoleTitle(NewConsoleTitle); } if(!IsSingleInstance(line_number)) { fprintf(stderr,"Another instance is already running\n"); fflush(stderr); IT_EXIT; return EXIT_FAILURE; } //Alloc OPC class and start Opc_client_hda_imp* p = new Opc_client_hda_imp(OPCServerAddress); // connect to an OPC server int nRet = p->OpcStart(OpcServerProgID, OpcclassId, OpcUpdateRate, OpcPercentDeadband); if(nRet) { p->OpcStop(); IT_EXIT; return EXIT_FAILURE; } nRet = p->load_database(); if(nRet) { p->OpcStop(); IT_EXIT; return EXIT_FAILURE; } p->opc_client_state_variable = OPC_CLIENT_INITIALIZED; p->Update(); p->OpcStop(); if(p) { delete p; } IT_EXIT; return EXIT_SUCCESS; }