- wxStringList args;
-
- wxString cmdLine(lpCmdLine);
- int count = 0;
-
- // Get application name
- wxChar name[260]; // 260 is MAX_PATH value from windef.h
- ::GetModuleFileName(wxhInstance, name, WXSIZEOF(name));
-
- args.Add(name);
- count++;
-
- wxStrcpy(name, wxFileNameFromPath(name));
- wxStripExtension(name);
- wxTheApp->SetAppName(name);
-
- // Break up string
- // Treat strings enclosed in double-quotes as single arguments
- int i = 0;
- int len = cmdLine.Length();
- while (i < len)
- {
- // Skip whitespace
- while ((i < len) && wxIsspace(cmdLine.GetChar(i)))
- i ++;
-
- if (i < len)
- {
- if (cmdLine.GetChar(i) == wxT('"')) // We found the start of a string
- {
- i ++;
- int first = i;
- while ((i < len) && (cmdLine.GetChar(i) != wxT('"')))
- i ++;
-
- wxString arg(cmdLine.Mid(first, (i - first)));
-
- args.Add(arg);
- count ++;
-
- if (i < len)
- i ++; // Skip past 2nd quote
- }
- else // Unquoted argument
- {
- int first = i;
- while ((i < len) && !wxIsspace(cmdLine.GetChar(i)))
- i ++;
-
- wxString arg(cmdLine.Mid(first, (i - first)));
-
- args.Add(arg);
- count ++;
- }
- }
- }
-
- wxTheApp->argv = new wxChar*[count + 1];
- for (i = 0; i < count; i++)
- {
- wxString arg(args[i]);
- wxTheApp->argv[i] = copystring((const wxChar*)arg);
- }
- wxTheApp->argv[count] = NULL; // argv[] is a NULL-terminated list
- wxTheApp->argc = count;
-}
-
-//// Cleans up any wxWindows internal structures left lying around
-
-void wxApp::CleanUp()
-{
- //// COMMON CLEANUP
-
-#if wxUSE_LOG
- // flush the logged messages if any and install a 'safer' log target: the
- // default one (wxLogGui) can't be used after the resources are freed just
- // below and the user suppliedo ne might be even more unsafe (using any
- // wxWindows GUI function is unsafe starting from now)
- wxLog::DontCreateOnDemand();
-
- // this will flush the old messages if any
- delete wxLog::SetActiveTarget(new wxLogStderr);
-#endif // wxUSE_LOG
-
- // One last chance for pending objects to be cleaned up
- wxTheApp->DeletePendingObjects();
-
- wxModule::CleanUpModules();
-
-#if wxUSE_WX_RESOURCES
- wxCleanUpResourceSystem();
-
- // wxDefaultResourceTable->ClearTable();
-#endif
-
- wxDeleteStockObjects();
-
- // Destroy all GDI lists, etc.
- wxDeleteStockLists();
-
- delete wxTheColourDatabase;
- wxTheColourDatabase = NULL;
-
- wxBitmap::CleanUpHandlers();
-
- delete[] wxBuffer;
- wxBuffer = NULL;
-
- //// WINDOWS-SPECIFIC CLEANUP