annotate host/tools/configtool/standalone/wxwin/ecutils.cpp @ 3355:4b1912ce7f4f

* standalone/wxwin/appsettings.cpp, standalone/wxwin/conflictsdlg.cpp, standalonw/wxwin/docsystem.cpp, standalone/wxwin/ecutils.cpp, standalone/wxwin/packagesdlg.cpp: Silence miscellaneous compiler warnings with recent GCC. [ Bugzilla 1001951 ]
author jld
date Fri, 28 Feb 2014 10:51:15 +0000
parents 74dbf4c3f2e1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
1 // ####ECOSHOSTGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
2 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
3 // This file is part of the eCos host tools.
3355
4b1912ce7f4f * standalone/wxwin/appsettings.cpp,
jld
parents: 2729
diff changeset
4 // Copyright (C) 1998, 1999, 2000, 2003, 2008, 2014 Free Software Foundation, Inc.
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
5 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
6 // This program is free software; you can redistribute it and/or modify
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
7 // it under the terms of the GNU General Public License as published by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
8 // the Free Software Foundation; either version 2 or (at your option) any
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
9 // later version.
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
10 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
11 // This program is distributed in the hope that it will be useful, but
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
12 // WITHOUT ANY WARRANTY; without even the implied warranty of
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
14 // General Public License for more details.
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
15 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
16 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
17 // along with this program; if not, write to the
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
18 // Free Software Foundation, Inc., 51 Franklin Street,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
19 // Fifth Floor, Boston, MA 02110-1301, USA.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
20 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2515
diff changeset
21 // ####ECOSHOSTGPLCOPYRIGHTEND####
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
22 //
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
23 //===========================================================================
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
24 //===========================================================================
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
25 //#####DESCRIPTIONBEGIN####
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
26 //
931
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
27 // Author(s): sdf, jld
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
28 // Contact(s): sdf
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
29 // Date: 1998/08/11
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
30 // Version: 0.01
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
31 // Purpose:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
32 // Description: This is a collection of utility functions.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
33 // Modified by julians for wxWindows (originally CTUtils.h)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
34 // Requires:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
35 // Provides:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
36 // See also:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
37 // Known bugs:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
38 // Usage:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
39 //
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
40 //####DESCRIPTIONEND####
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
41 //
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
42 //===========================================================================
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
43
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
44 #ifdef __GNUG__
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
45 #pragma implementation "ecutils.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
46 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
47
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
48 // Includes other headers for precompiled compilation
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
49 #include "ecpch.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
50
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
51 #ifdef __BORLANDC__
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
52 #pragma hdrstop
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
53 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
54
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
55 #include "ecutils.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
56 #include "wx/listctrl.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
57 #include "wx/stream.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
58
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
59 #include <float.h> // for DBL_DIG macro
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
60 #include <sys/types.h>
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
61 #include <sys/stat.h>
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
62
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
63 #ifndef __WXMSW__
496
6c2a59f5102f * standalone/wxwin/ecutils.cpp: #include <errno.h>
jld
parents: 182
diff changeset
64 #include <errno.h>
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
65 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
66
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
67 #ifdef __WXMSW__
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
68 #include <tlhelp32.h>
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
69 #endif
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
70
931
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
71 #ifdef __CYGWIN__
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
72 #include <sys/cygwin.h> /* for cygwin_conv_to_*_path() */
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
73 #endif
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
74
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
75 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
76
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
77 #define INCLUDEFILE <string>
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
78 #include "IncludeSTL.h"
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
79
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
80 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
81
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
82 // Chop str into pieces, using cSep as separator.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
83 // " and \ have usual semantics
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
84 // Return value is array of pieces found.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
85
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
86 int ecUtils::Chop(const wxString& psz, wxArrayString &ar, wxChar cSep,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
87 bool bObserveStrings/*=false*/,bool bBackslashQuotes/*=false*/)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
88
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
89 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
90 if(wxT(' ') == cSep)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
91 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
92 return Chop(psz, ar, wxT("\t\n\v\f\r "), bObserveStrings, bBackslashQuotes);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
93 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
94 wxASSERT(wxT('\0')!=cSep);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
95 wxChar c[2]={cSep,wxT('\0')};
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
96 return Chop(psz,ar,wxString(c),bObserveStrings,bBackslashQuotes);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
97 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
98 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
99
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
100 int ecUtils::Chop(const wxString& str, wxArrayString &ar, const wxString& sep,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
101 bool bObserveStrings/*=false*/,bool bBackslashQuotes/*=false*/)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
102 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
103 ar.Clear();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
104
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
105 const wxChar* pszSep = (const wxChar*) sep;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
106 const wxChar* psz = (const wxChar*) str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
107
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
108 int i=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
109 for(;;){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
110 // Skip multiple separators
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
111 while(*psz && wxStrchr(pszSep,*psz)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
112 psz++;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
113 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
114 if(!*psz){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
115 return i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
116 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
117 wxString strTok;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
118 if(bObserveStrings){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
119 bool bInString=FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
120 do{
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
121 if(*psz == wxT('\\') && bBackslashQuotes && psz[1]){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
122 strTok += psz[1];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
123 psz++;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
124 } else if(*psz == wxT('"')){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
125 bInString ^= 1;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
126 } else if (!bInString && *psz && NULL != wxStrchr(pszSep,*psz)) {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
127 break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
128 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
129 strTok+=*psz;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
130 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
131 } while (*++psz);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
132 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
133 const wxChar* pszStart=psz;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
134 do {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
135 psz++;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
136 } while (*psz && ! wxStrchr(pszSep,*psz));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
137 strTok=wxString(pszStart,psz-pszStart);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
138 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
139 ar.Add(strTok);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
140 i++;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
141 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
142 return ar.GetCount();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
143 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
144
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
145 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
146
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
147 // vararg-style message box formatter
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
148 int ecUtils::MessageBoxF (LPCTSTR pszFormat, ...)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
149 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
150 int rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
151 va_list args;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
152 va_start(args, pszFormat);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
153 rc=ecUtils::vMessageBox(MB_OK, pszFormat,args);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
154 va_end(args);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
155 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
156 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
157
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
158 // As above, but with type as first parameter.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
159 int ecUtils::MessageBoxFT (UINT nType, LPCTSTR pszFormat, ...)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
160 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
161 int rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
162 va_list args;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
163 va_start(args, pszFormat);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
164 rc=ecUtils::vMessageBox(nType, pszFormat,args);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
165 va_end(args);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
166 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
167 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
168
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
169 int ecUtils::vMessageBox(UINT nType, LPCTSTR pszFormat, va_list marker)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
170 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
171 int rc=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
172 for(int nLength=100;nLength;) {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
173 TCHAR *buf=new TCHAR[1+nLength];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
174 int n=_vsntprintf(buf, nLength, pszFormat, marker );
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
175 if(-1==n){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
176 nLength*=2; // NT behavior
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
177 } else if (n<nLength){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
178 rc=AfxMessageBox(buf,nType);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
179 nLength=0; // trigger exit from loop
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
180 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
181 nLength=n+1; // UNIX behavior generally, or NT behavior when buffer size exactly matches required length
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
182 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
183 delete [] buf;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
184 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
185 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
186 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
187
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
188 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
189
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
190 bool ecUtils::StrToItemIntegerType(const wxString & str, long &d)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
191 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
192 wxChar* pEnd;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
193 bool rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
194 errno=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
195 bool bHex=(str.Len() > 2 && str[0]==wxT('0') && (str[1]==wxT('x')||str[1]==wxT('X')));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
196 //d=_tcstol(str,&pEnd,bHex?16:10);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
197 d=wxStrtol(str,&pEnd,bHex?16:10);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
198 rc=(0==errno && (*pEnd==wxT('\0')));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
199 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
200 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
201
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
202 const wxString ecUtils::IntToStr(long d,bool bHex)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
203 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
204 wxString s;
3355
4b1912ce7f4f * standalone/wxwin/appsettings.cpp,
jld
parents: 2729
diff changeset
205 s.Printf(bHex?wxT("0x%08lx"):wxT("%ld"),d);
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
206 return s;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
207 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
208
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
209 const wxString ecUtils::DoubleToStr (double dValue)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
210 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
211 wxString s;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
212 s.Printf(wxT("%.*e"), DBL_DIG, dValue);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
213 return s;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
214 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
215
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
216 bool ecUtils::StrToDouble (const wxString & strValue, double &dValue)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
217 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
218 wxChar* pEnd;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
219 errno = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
220 //dValue = _tcstod (strValue, &pEnd);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
221 dValue = wxStrtod(strValue, &pEnd);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
222 return (0 == errno) && (*pEnd == wxT('\0'));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
223 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
224
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
225 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
226 const wxString ecUtils::Explanation(CFileException & exc)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
227 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
228 wxString strMsg;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
229 switch(exc.m_cause){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
230 case CFileException::none: strMsg=wxT("No error occurred.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
231 case CFileException::generic: strMsg=wxT(" An unspecified error occurred.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
232 case CFileException::fileNotFound: strMsg=wxT(" The file could not be located.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
233 case CFileException::badPath: strMsg=wxT(" All or part of the path is invalid.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
234 case CFileException::tooManyOpenFiles: strMsg=wxT(" The permitted number of open files was exceeded.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
235 case CFileException::accessDenied: strMsg=wxT(" The file could not be accessed.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
236 case CFileException::invalidFile: strMsg=wxT(" There was an attempt to use an invalid file handle.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
237 case CFileException::removeCurrentDir: strMsg=wxT(" The current working directory cannot be removed.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
238 case CFileException::directoryFull: strMsg=wxT(" There are no more directory entries.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
239 case CFileException::badSeek: strMsg=wxT(" There was an error trying to set the file pointer.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
240 case CFileException::hardIO: strMsg=wxT(" There was a hardware error.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
241 case CFileException::sharingViolation: strMsg=wxT(" SHARE.EXE was not loaded, or a shared region was locked.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
242 case CFileException::lockViolation: strMsg=wxT(" There was an attempt to lock a region that was already locked.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
243 case CFileException::diskFull: strMsg=wxT(" The disk is full.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
244 case CFileException::endOfFile: strMsg=wxT(" The end of file was reached. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
245 default:
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
246 strMsg=wxT(" Unknown cause");
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
247 break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
248 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
249 return strMsg;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
250 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
251
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
252
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
253 const wxString ecUtils::LoadString(UINT id)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
254 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
255 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
256 str.LoadString(id);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
257 return str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
258 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
259 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
260
931
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
261 const wxString ecUtils::NativeToPosixPath(const wxString & native)
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
262 {
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
263 #ifdef __CYGWIN__
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
264 if (native.IsEmpty())
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
265 return native;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
266 else
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
267 {
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
268 wxString posix;
2515
24c0267fbb70 * Utils/ChangeLog Utils/common/eCosStd.h,
jld
parents: 2466
diff changeset
269 cygwin_conv_to_posix_path(native.c_str(), posix.GetWriteBuf(PATH_MAX + 1));
931
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
270 posix.UngetWriteBuf();
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
271 return posix;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
272 }
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
273 #else
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
274 return native;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
275 #endif
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
276 }
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
277
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
278 const wxString ecUtils::PosixToNativePath(const wxString & posix)
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
279 {
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
280 #ifdef __CYGWIN__
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
281 if (posix.IsEmpty())
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
282 return posix;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
283 else
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
284 {
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
285 wxString native;
2515
24c0267fbb70 * Utils/ChangeLog Utils/common/eCosStd.h,
jld
parents: 2466
diff changeset
286 cygwin_conv_to_win32_path(posix.c_str(), native.GetWriteBuf(PATH_MAX + 1));
931
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
287 native.UngetWriteBuf();
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
288 return native;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
289 }
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
290 #else
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
291 return posix;
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
292 #endif
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
293 }
d7c9117adc25 * standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents: 517
diff changeset
294
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
295 bool ecUtils::AddToPath(const ecFileName & strFolder, bool bAtFront)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
296 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
297 wxString strPath,strOldPath;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
298
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
299 if (wxGetEnv(wxT("PATH"), & strOldPath))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
300 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
301 // Place the user tools folders at the head or tail of the new path
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
302 if(bAtFront)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
303 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
304 strPath.Printf(wxT("%s;%s"), (const wxChar*) strFolder.ShortName(), (const wxChar*) strOldPath);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
305 } else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
306 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
307 strPath.Printf(wxT("%s;%s"), (const wxChar*) strOldPath, (const wxChar*) strFolder.ShortName());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
308 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
309 } else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
310 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
311 // unlikely, but ...
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
312 strPath = strFolder;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
313 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
314 return (TRUE == wxSetEnv(wxT("PATH"),strPath));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
315 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
316
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
317 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
318 wxString ecUtils::GetLastErrorMessageString()
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
319 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
320 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
321 PTCHAR pszMsg;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
322 FormatMessage(
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
323 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
324 NULL,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
325 GetLastError(),
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
326 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
327 (LPTSTR)&pszMsg,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
328 0,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
329 NULL
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
330 );
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
331
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
332 // Display the string.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
333 str=pszMsg;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
334 str.TrimRight();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
335 // Free the buffer.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
336 LocalFree(pszMsg);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
337 return str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
338
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
339 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
340
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
341 bool ecUtils::Launch(const ecFileName &strFileName, const ecFileName &strViewer)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
342 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
343 bool rc=false;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
344
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
345 if(!strViewer.IsEmpty())//use custom editor
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
346 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
347 wxString strCmdline(strViewer);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
348
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
349 PTCHAR pszCmdLine=strCmdline.GetBuffer(strCmdline.GetLength());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
350 GetShortPathName(pszCmdLine,pszCmdLine,strCmdline.GetLength());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
351 strCmdline.ReleaseBuffer();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
352
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
353 strCmdline+=_TCHAR(' ');
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
354 strCmdline+=strFileName;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
355 PROCESS_INFORMATION pi;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
356 STARTUPINFO si;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
357
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
358 si.cb = sizeof(STARTUPINFO);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
359 si.lpReserved = NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
360 si.lpReserved2 = NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
361 si.cbReserved2 = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
362 si.lpDesktop = NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
363 si.dwFlags = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
364 si.lpTitle=NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
365
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
366 if(CreateProcess(
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
367 NULL, // app name
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
368 //strCmdline.GetBuffer(strCmdline.GetLength()), // command line
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
369 strCmdline.GetBuffer(strCmdline.GetLength()), // command line
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
370 NULL, // process security
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
371 NULL, // thread security
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
372 TRUE, // inherit handles
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
373 0,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
374 NULL, // environment
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
375 NULL, // current dir
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
376 &si, // startup info
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
377 &pi)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
378 CloseHandle(pi.hProcess);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
379 CloseHandle(pi.hThread);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
380 rc=true;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
381 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
382 MessageBoxF(wxT("Failed to invoke %s.\n"),strCmdline);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
383 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
384 strCmdline.ReleaseBuffer();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
385 } else {// Use association
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
386 TCHAR szExe[MAX_PATH];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
387 HINSTANCE h=FindExecutable(strFileName,wxT("."),szExe);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
388 if(int(h)<=32){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
389 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
390 switch(int(h)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
391 case 0: str=wxT("The system is out of memory or resources.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
392 case 31: str=wxT("There is no association for the specified file type.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
393 case ERROR_FILE_NOT_FOUND: str=wxT("The specified file was not found.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
394 case ERROR_PATH_NOT_FOUND: str=wxT("The specified path was not found.");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
395 case ERROR_BAD_FORMAT: str=wxT("The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
396 default: break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
397 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
398 MessageBoxF(wxT("Failed to open document %s.\r\n%s"),strFileName,str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
399 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
400
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
401 SHELLEXECUTEINFO sei = {sizeof(sei), 0, AfxGetMainWnd()->GetSafeHwnd(), wxT("open"),
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
402 strFileName, NULL, NULL, SW_SHOWNORMAL, AfxGetInstanceHandle( )};
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
403
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
404 sei.hInstApp=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
405 HINSTANCE hInst=ShellExecute(AfxGetMainWnd()->GetSafeHwnd(),wxT("open"), strFileName, NULL, wxT("."), 0)/*ShellExecuteEx(&sei)*/;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
406 if(int(hInst)<=32/*sei.hInstApp==0*/)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
407 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
408 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
409 switch(int(hInst))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
410 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
411 case 0 : str=wxT("The operating system is out of memory or resources. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
412 case ERROR_FILE_NOT_FOUND : str=wxT("The specified file was not found. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
413 case ERROR_PATH_NOT_FOUND : str=wxT("The specified path was not found. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
414 case ERROR_BAD_FORMAT : str=wxT("The .EXE file is invalid (non-Win32 .EXE or error in .EXE image). ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
415 case SE_ERR_ACCESSDENIED : str=wxT("The operating system denied access to the specified file. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
416 case SE_ERR_ASSOCINCOMPLETE : str=wxT("The filename association is incomplete or invalid. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
417 case SE_ERR_DDEBUSY : str=wxT("The DDE transaction could not be completed because other DDE transactions were being processed. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
418 case SE_ERR_DDEFAIL : str=wxT("The DDE transaction failed. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
419 case SE_ERR_DDETIMEOUT : str=wxT("The DDE transaction could not be completed because the request timed out. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
420 case SE_ERR_DLLNOTFOUND : str=wxT("The specified dynamic-link library was not found. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
421 //case SE_ERR_FNF : str=wxT("The specified file was not found. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
422 case SE_ERR_NOASSOC : str=wxT("There is no application associated with the given filename extension. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
423 case SE_ERR_OOM : str=wxT("There was not enough memory to complete the operation. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
424 //case SE_ERR_PNF : str=wxT("The specified path was not found. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
425 case SE_ERR_SHARE : str=wxT("A sharing violation occurred. ");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
426 default: str=wxT("An unexpected error occurred");break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
427 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
428 MessageBoxF(wxT("Failed to open document %s using %s.\r\n%s"),strFileName,szExe,str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
429 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
430 rc=true;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
431 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
432 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
433 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
434 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
435 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
436
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
437 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
438
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
439 void ecUtils::UnicodeToCStr(const wxChar* str,char *&psz)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
440 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
441 int nLength=1 + wxStrlen(str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
442 psz=new char[nLength];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
443 #ifdef _UNICODE
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
444 WideCharToMultiByte(CP_ACP, 0, str, -1, psz, nLength, NULL, NULL);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
445 #else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
446 strcpy(psz,str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
447 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
448 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
449
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
450 std::string ecUtils::UnicodeToStdStr(const wxChar* str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
451 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
452 std::string stdstr;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
453 char *psz;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
454 UnicodeToCStr(str,psz);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
455 stdstr=std::string(psz);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
456 delete psz;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
457 return stdstr;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
458 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
459
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
460 // ecUtils::StripExtraWhitespace() returns a modified version of
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
461 // a string in which each sequence of whitespace characters is
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
462 // replaced by a single space
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
463
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
464 static bool ecIsSpace(wxChar ch)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
465 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
466 return (ch == wxT(' ') || ch == wxT('\r') || ch == wxT('\n') || ch == wxT('\t'));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
467 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
468
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
469 wxString ecUtils::StripExtraWhitespace (const wxString & strInput)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
470 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
471 wxString strOutput;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
472 wxChar* o=strOutput.GetWriteBuf(1+strInput.Len());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
473 for(const wxChar* c=strInput.GetData();*c;c++){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
474 if(ecIsSpace(*c)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
475 *o++=wxT(' ');
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
476 if (ecIsSpace(c[1])){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
477 for(c=c+2; ecIsSpace(*c);c++);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
478 c--;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
479 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
480 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
481 *o++=*c;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
482 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
483 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
484 *o=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
485 strOutput.UngetWriteBuf();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
486 strOutput.Trim(TRUE);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
487 strOutput.Trim(FALSE);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
488 return strOutput;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
489 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
490 wxString strOutput;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
491 LPTSTR o=strOutput.GetBuffer(1+strInput.GetLength());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
492 for(LPCTSTR c=strInput;*c;c++){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
493 if(_istspace(*c)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
494 *o++=_TCHAR(' ');
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
495 if (_istspace(c[1])){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
496 for(c=c+2;_istspace(*c);c++);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
497 c--;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
498 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
499 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
500 *o++=*c;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
501 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
502 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
503 *o=0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
504 strOutput.ReleaseBuffer();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
505 strOutput.TrimLeft();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
506 strOutput.TrimRight();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
507 return strOutput;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
508 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
509 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
510
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
511 #if 0
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
512 ecFileName ecUtils::WPath(const std::string &str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
513 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
514 // Convert a path as read from cdl into host format
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
515 // Change / to \ throughout
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
516 ecFileName
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
517 strPath(str.c_str());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
518 strPath.Replace (_TCHAR('/'), _TCHAR('\\'));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
519 return strPath;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
520 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
521
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
522 // Copy file helper function.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
523 // This makes sure the destination file is only touched as necessary.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
524 // It is written using Posix calls lest it should be more broadly applicable.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
525
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
526 bool ecUtils::CopyFile(LPCTSTR pszSource,LPCTSTR pszDest)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
527 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
528 // Compare the files. First set rc to the result of the comparison (true if the same)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
529 bool rc=false;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
530
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
531 struct _stat s1,s2;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
532 if(-1!=_tstat(pszSource,&s1) && -1!=_tstat(pszDest,&s2) && s1.st_size==s2.st_size){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
533 // Files both exist and are of equal size
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
534 FILE *f1=_tfopen(pszSource,wxT("rb"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
535 if(f1){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
536 FILE *f2=_tfopen(pszDest,wxT("rb"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
537 if(f2){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
538 int nSize1,nSize2;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
539 rc=true;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
540 do{
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
541 char buf1[4096],buf2[4096];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
542 nSize1=fread(buf1,1,sizeof buf1,f1);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
543 nSize2=fread(buf2,1,sizeof buf2,f2);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
544 if(nSize1!=nSize2 || 0!=memcmp(buf1,buf2,nSize1)){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
545 rc=false;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
546 break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
547 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
548 } while (nSize1>0);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
549 fclose(f2);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
550 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
551 fclose(f1);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
552 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
553 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
554
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
555 if(rc){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
556 // Files are identical
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
557 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
558 rc=TRUE==::CopyFile(pszSource,pszDest,FALSE);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
559 if(rc){
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
560 } else {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
561 MessageBoxF(wxT("Failed to copy '%s' to '%s' - %s"),pszSource,pszDest,GetLastErrorMessageString());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
562 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
563 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
564
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
565 return rc;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
566 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
567
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
568 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
569
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
570 /*
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
571 * wxStringToStringMap
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
572 *
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
573 * Stores string values keyed by strings
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
574 */
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
575
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
576 void wxStringToStringMap::Set(const wxString& key, const wxString& value)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
577 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
578 wxString oldValue;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
579 if (Find(key, oldValue))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
580 Remove(key);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
581 m_hashTable.Put(key, (wxObject*) new wxString(value));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
582 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
583
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
584 bool wxStringToStringMap::Remove(const wxString& key)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
585 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
586 wxString* str = (wxString*) m_hashTable.Delete(key);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
587 if (str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
588 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
589 delete str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
590 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
591 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
592 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
593 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
594 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
595
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
596 bool wxStringToStringMap::Find(const wxString& key, wxString& value)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
597 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
598 wxString* str = (wxString*) m_hashTable.Get(key);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
599 if (str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
600 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
601 value = * str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
602 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
603 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
604 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
605 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
606 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
607
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
608 void wxStringToStringMap::Clear()
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
609 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
610 m_hashTable.BeginFind();
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
611 #if wxCHECK_VERSION(2, 6, 0)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
612 wxHashTable::Node* node;
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
613 while ((node = m_hashTable.Next()))
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
614 {
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
615 wxString* str = (wxString*) node->GetData();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
616 #else
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
617 wxNode* node;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
618 while ((node = m_hashTable.Next()))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
619 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
620 wxString* str = (wxString*) node->Data();
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
621 #endif
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
622 delete str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
623 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
624 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
625
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
626 void wxStringToStringMap::BeginFind()
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
627 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
628 m_hashTable.BeginFind();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
629 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
630
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
631 bool wxStringToStringMap::Next(wxString& key, wxString& value)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
632 {
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
633 #if wxCHECK_VERSION(2, 6, 0)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
634 wxHashTable::Node* node = m_hashTable.Next();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
635 if (node)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
636 {
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
637 value = * (wxString*) node->GetData();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
638 #else
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
639 wxNode* node = m_hashTable.Next();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
640 if (node)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
641 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
642 value = * (wxString*) node->Data();
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
643 #endif
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
644 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
645 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
646 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
647 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
648 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
649
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
650 // Is str a member of arr?
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
651 bool wxArrayStringIsMember(const wxArrayString& arr, const wxString& str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
652 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
653 size_t i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
654 for (i = (size_t) 0; i < arr.GetCount(); i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
655 if (arr[i] == str)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
656 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
657
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
658 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
659 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
660
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
661 // Eliminate .. and .
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
662 wxString wxGetRealPath(const wxString& path)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
663 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
664 wxChar* p = new wxChar[path.Len() + 1];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
665 wxStrcpy(p, (const wxChar*) path);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
666 wxRealPath(p);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
667
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
668 wxString str(p);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
669 delete[] p;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
670 return str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
671 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
672
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
673 // A version of the above but prepending 'cwd' (current path) first
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
674 // if 'path' is relative
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
675 wxString wxGetRealPath(const wxString& cwd, const wxString& path)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
676 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
677 wxString path1(path);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
678
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
679 if (!wxIsAbsolutePath(path))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
680 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
681 path1 = cwd;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
682 if (path1.Last() != wxFILE_SEP_PATH)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
683 path1 += wxFILE_SEP_PATH;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
684 path1 += path;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
685 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
686
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
687 return wxGetRealPath(path1);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
688 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
689
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
690 // Find the absolute path where this application has been run from.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
691 // argv0 is wxTheApp->argv[0]
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
692 // cwd is the current working directory (at startup)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
693 // appVariableName is the name of a variable containing the directory for this app, e.g.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
694 // MYAPPDIR. This is checked first.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
695
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
696 wxString wxFindAppPath(const wxString& argv0, const wxString& cwd, const wxString& appVariableName)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
697 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
698 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
699
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
700 // Try appVariableName
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
701 if (!appVariableName.IsEmpty())
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
702 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
703 str = wxGetenv(appVariableName);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
704 if (!str.IsEmpty())
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
705 return str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
706 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
707
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
708 if (wxIsAbsolutePath(argv0))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
709 return wxPathOnly(argv0);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
710 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
711 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
712 // Is it a relative path?
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
713 wxString currentDir(cwd);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
714 if (currentDir.Last() != wxFILE_SEP_PATH)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
715 currentDir += wxFILE_SEP_PATH;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
716
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
717 str = currentDir + argv0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
718 if (wxFileExists(str))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
719 return wxPathOnly(str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
720 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
721
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
722 // OK, it's neither an absolute path nor a relative path.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
723 // Search PATH.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
724
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
725 wxPathList pathList;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
726 pathList.AddEnvList(wxT("PATH"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
727 str = pathList.FindAbsoluteValidPath(argv0);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
728 if (!str.IsEmpty())
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
729 return wxPathOnly(str);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
730
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
731 // Failed
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
732 return wxEmptyString;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
733 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
734
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
735 // Make a path name with no separators, out of a full pathname,
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
736 // e.g. opt_ecos_ecos-1.4.5 out of /opt/ecos/ecos-1.4.5
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
737 wxString ecMakeNameFromPath(const wxString& path)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
738 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
739 wxString p(path);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
740 p.Replace(wxT("/"), wxT("_"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
741 p.Replace(wxT("\\"), wxT("_"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
742 p.Replace(wxT(":"), wxT("_"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
743 return p;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
744 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
745
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
746
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
747 // Find the text of the list control item at the given column
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
748 wxString wxListCtrlGetItemTextColumn(wxListCtrl& listCtrl, long item, int col)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
749 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
750 wxListItem listItem;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
751 listItem.m_mask = wxLIST_MASK_TEXT;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
752 listItem.m_itemId = item;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
753 listItem.m_col = col;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
754
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
755 if (listCtrl.GetItem(listItem))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
756 return listItem.m_text;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
757 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
758 return wxEmptyString;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
759 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
760
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
761 // Select the given item
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
762 void wxListCtrlSelectItem(wxListCtrl& listCtrl, long sel, bool deselectOthers)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
763 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
764 long n = listCtrl.GetItemCount();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
765 long i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
766 if (deselectOthers)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
767 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
768 for (i = 0; i < n; i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
769 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
770 if (listCtrl.GetItemState(i, wxLIST_STATE_SELECTED) & wxLIST_STATE_SELECTED)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
771 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
772 listCtrl.SetItemState(i, wxLIST_STATE_SELECTED, 0);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
773 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
774 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
775 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
776 listCtrl.SetItemState(sel, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
777 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
778
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
779 // Find the selection
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
780 long wxListCtrlGetSelection(wxListCtrl& listCtrl)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
781 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
782 long n = listCtrl.GetItemCount();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
783 long i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
784 for (i = 0; i < n; i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
785 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
786 if (listCtrl.GetItemState(i, wxLIST_STATE_SELECTED) & wxLIST_STATE_SELECTED)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
787 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
788 return i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
789 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
790 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
791 return -1;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
792 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
793
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
794 // Find which column the cursor is on
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
795 int wxListCtrlFindColumn(wxListCtrl& listCtrl, int noCols, int x)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
796 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
797 int col = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
798
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
799 // Find which column we're on
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
800 int width = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
801 int i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
802 for (i = 0; i < noCols; i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
803 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
804 width += listCtrl.GetColumnWidth(i);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
805 if (x <= width)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
806 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
807 col = i;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
808 break;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
809 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
810 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
811 return col;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
812 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
813
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
814 // Utility function
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
815 void wxRefreshControls(wxWindow* win)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
816 {
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
817 #if wxCHECK_VERSION(2, 6, 0)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
818 wxNode *node = (wxNode *) win->GetChildren().GetFirst();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
819 while (node)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
820 {
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
821 wxWindow* win = (wxWindow*) node->GetData();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
822 win->Refresh();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
823 node = node->GetNext();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
824 }
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
825 #else
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
826 wxNode *node = win->GetChildren().First();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
827 while (node)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
828 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
829 wxWindow* win = (wxWindow*) node->Data();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
830 win->Refresh();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
831 node = node->Next();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
832 }
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
833 #endif
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
834 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
835
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
836 wxOutputStream& operator <<(wxOutputStream& stream, const wxString& s)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
837 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
838 stream.Write(s, s.Length());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
839 return stream;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
840 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
841
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
842 wxOutputStream& operator <<(wxOutputStream& stream, long l)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
843 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
844 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
845 str.Printf("%ld", l);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
846 return stream << str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
847 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
848
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
849 wxOutputStream& operator <<(wxOutputStream& stream, const char c)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
850 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
851 wxString str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
852 str.Printf("%c", c);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
853 return stream << str;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
854 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
855
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
856 /*
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
857 * ecDialog
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
858 * Supports features we want to have for all dialogs in the application.
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
859 * So far, this just allows dialogs to be resizeable under MSW by
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
860 * refreshing the controls in OnSize (otherwise there's a mess)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
861 */
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
862
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
863 IMPLEMENT_CLASS(ecDialog, wxDialog)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
864
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
865 BEGIN_EVENT_TABLE(ecDialog, wxDialog)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
866 #ifdef __WXMSW__
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
867 EVT_SIZE(ecDialog::OnSize)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
868 #endif
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
869 END_EVENT_TABLE()
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
870
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
871 void ecDialog::OnSize(wxSizeEvent& event)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
872 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
873 wxDialog::OnSize(event);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
874
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
875 wxRefreshControls(this);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
876 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
877
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
878 /*
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
879 * Implements saving/loading of window settings - fonts only for now
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
880 */
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
881
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
882 wxWindowSettingsObject* wxWindowSettings::FindSettings(const wxString& windowName) const
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
883 {
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
884 #if wxCHECK_VERSION(2, 6, 0)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
885 wxNode* node = m_settings.GetFirst();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
886 while (node)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
887 {
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
888 wxWindowSettingsObject* obj = (wxWindowSettingsObject*) node->GetData();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
889 if (obj->m_windowName.CmpNoCase(windowName) == 0)
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
890 return obj;
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
891 node = node->GetNext();
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
892 }
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
893 #else
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
894 wxNode* node = m_settings.First();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
895 while (node)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
896 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
897 wxWindowSettingsObject* obj = (wxWindowSettingsObject*) node->Data();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
898 if (obj->m_windowName.CmpNoCase(windowName) == 0)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
899 return obj;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
900 node = node->Next();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
901 }
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
902 #endif
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
903
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
904 return NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
905 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
906
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
907 bool wxWindowSettings::LoadConfig(wxConfigBase& config)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
908 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
909 unsigned int i = 0;
2466
480aa5d146e3 * configtool/standalone/wxwin/admindlg.cpp,
jld
parents: 931
diff changeset
910
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
911 for (i = 0; i < GetCount(); i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
912 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
913 wxWindowSettingsObject* obj = GetNth(i);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
914
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
915 wxString name(obj->m_windowName);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
916 name.Replace(wxT(" "), wxT(""));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
917
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
918 LoadFont(config, name, obj->m_font);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
919 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
920
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
921 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
922 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
923
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
924 bool wxWindowSettings::SaveConfig(wxConfigBase& config)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
925 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
926 unsigned int i = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
927 for (i = 0; i < GetCount(); i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
928 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
929 wxWindowSettingsObject* obj = GetNth(i);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
930
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
931 wxString name(obj->m_windowName);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
932 name.Replace(wxT(" "), wxT(""));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
933
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
934 SaveFont(config, name, obj->m_font);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
935 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
936
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
937 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
938 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
939
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
940 // Load and save font descriptions
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
941 bool wxWindowSettings::LoadFont(wxConfigBase& config, const wxString& windowName, wxFont& font)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
942 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
943 wxString pathBase(wxT("/Fonts/"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
944 pathBase += windowName;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
945 pathBase += wxT("/");
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
946
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
947 int pointSize, family, style, weight;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
948 bool underlined = FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
949 wxString faceName;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
950
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
951 if (!config.Read(pathBase + wxT("PointSize"), & pointSize))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
952 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
953
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
954 if (!config.Read(pathBase + wxT("Family"), & family))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
955 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
956
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
957 if (!config.Read(pathBase + wxT("Style"), & style))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
958 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
959
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
960 if (!config.Read(pathBase + wxT("Weight"), & weight))
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
961 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
962
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
963 config.Read(pathBase + wxT("Underlined"), (bool*) & underlined);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
964 config.Read(pathBase + wxT("FaceName"), & faceName);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
965
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
966 wxFont font1(pointSize, family, style, weight, underlined, faceName);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
967 font = font1;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
968
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
969 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
970 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
971
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
972 bool wxWindowSettings::SaveFont(wxConfigBase& config, const wxString& windowName, const wxFont& font)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
973 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
974 if (!font.Ok())
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
975 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
976
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
977 wxString pathBase(wxT("/Fonts/"));
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
978 pathBase += windowName;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
979 pathBase += wxT("/");
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
980
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
981 config.Write(pathBase + wxT("PointSize"), (long) font.GetPointSize());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
982 config.Write(pathBase + wxT("Family"), (long) font.GetFamily());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
983 config.Write(pathBase + wxT("Style"), (long) font.GetStyle());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
984 config.Write(pathBase + wxT("Weight"), (long) font.GetWeight());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
985 config.Write(pathBase + wxT("Underlined"), (long) font.GetUnderlined());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
986 config.Write(pathBase + wxT("FaceName"), font.GetFaceName());
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
987
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
988 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
989 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
990
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
991 wxFont wxWindowSettings::GetFont(const wxString& name) const
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
992 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
993 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
994 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
995 return wxFont();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
996 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
997 return obj->m_font;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
998 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
999
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1000 void wxWindowSettings::SetFont(const wxString& name, const wxFont& font)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1001 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1002 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1003 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1004 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1005 obj = new wxWindowSettingsObject(name, NULL) ;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1006 obj->m_font = font;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1007 m_settings.Append(obj);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1008 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1009 obj->m_font = font;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1010 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1011
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1012 wxWindow* wxWindowSettings::GetWindow(const wxString& name) const
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1013 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1014 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1015 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1016 return NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1017 if (obj->m_arrWindow.GetCount() > 0)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1018 return (wxWindow*) obj->m_arrWindow[0];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1019 else
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1020 return NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1021 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1022
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1023 void wxWindowSettings::SetWindow(const wxString& name, wxWindow* win)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1024 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1025 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1026 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1027 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1028 obj = new wxWindowSettingsObject(name, win) ;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1029 m_settings.Append(obj);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1030 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1031 obj->m_arrWindow.Clear();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1032
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1033 if (win)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1034 obj->m_arrWindow.Add(win);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1035 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1036
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1037 wxArrayPtrVoid* wxWindowSettings::GetWindows(const wxString& name) const
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1038 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1039 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1040 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1041 return NULL;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1042 return & obj->m_arrWindow ;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1043 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1044
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1045 void wxWindowSettings::SetWindows(const wxString& name, wxArrayPtrVoid& arr)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1046 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1047 wxWindowSettingsObject* obj = FindSettings(name);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1048 if (!obj)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1049 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1050 obj = new wxWindowSettingsObject(name, NULL) ;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1051 m_settings.Append(obj);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1052 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1053 obj->m_arrWindow.Clear() ;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1054 obj->m_arrWindow = arr;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1055 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1056
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1057 bool wxWindowSettings::ApplyFontsToWindows()
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1058 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1059 if (m_useDefaults)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1060 return FALSE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1061
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1062 unsigned int i = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1063 for (i = 0; i < GetCount(); i++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1064 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1065 wxWindowSettingsObject* obj = GetNth(i);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1066
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1067 unsigned int j = 0;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1068 for (j = 0; j < obj->m_arrWindow.GetCount(); j++)
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1069 {
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1070 wxWindow* win = (wxWindow*) obj->m_arrWindow[j];
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1071 win->SetFont(obj->m_font);
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1072 win->Refresh();
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1073 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1074 }
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1075 return TRUE;
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff changeset
1076 }
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1077
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1078 #ifdef __WIN32__
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1079 // This will be obsolete when we switch to using the version included
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1080 // in wxWindows (from wxWin 2.3.1 onwards)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1081 enum ecKillError
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1082 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1083 ecKILL_OK, // no error
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1084 ecKILL_BAD_SIGNAL, // no such signal
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1085 ecKILL_ACCESS_DENIED, // permission denied
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1086 ecKILL_NO_PROCESS, // no such process
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1087 ecKILL_ERROR // another, unspecified error
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1088 };
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1089 #endif
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1090
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1091 // ----------------------------------------------------------------------------
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1092 // process management
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1093 // ----------------------------------------------------------------------------
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1094
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1095 #ifdef __WIN32__
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1096
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1097 // structure used to pass parameters from wxKill() to wxEnumFindByPidProc()
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1098 struct wxNewFindByPidParams
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1099 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1100 wxNewFindByPidParams() { hwnd = 0; pid = 0; }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1101
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1102 // the HWND used to return the result
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1103 HWND hwnd;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1104
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1105 // the PID we're looking from
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1106 DWORD pid;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1107 };
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1108
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1109 // wxKill helper: EnumWindows() callback which is used to find the first (top
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1110 // level) window belonging to the given process
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1111 static BOOL CALLBACK wxEnumFindByPidProc(HWND hwnd, LPARAM lParam)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1112 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1113 DWORD pid;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1114 (void)::GetWindowThreadProcessId(hwnd, &pid);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1115
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1116 wxNewFindByPidParams *params = (wxNewFindByPidParams *)lParam;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1117 if ( pid == params->pid )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1118 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1119 // remember the window we found
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1120 params->hwnd = hwnd;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1121
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1122 // return FALSE to stop the enumeration
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1123 return FALSE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1124 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1125
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1126 // continue enumeration
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1127 return TRUE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1128 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1129
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1130 // This will be obsolete when we switch to using the version included
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1131 // in wxWindows (from wxWin 2.3.1 onwards)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1132 int wxNewKill(long pid, wxSignal sig, ecKillError *krc = NULL)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1133 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1134 #ifdef __WIN32__
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1135 // get the process handle to operate on
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1136 HANDLE hProcess = ::OpenProcess(SYNCHRONIZE |
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1137 PROCESS_TERMINATE |
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1138 PROCESS_QUERY_INFORMATION,
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1139 FALSE, // not inheritable
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1140 (DWORD)pid);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1141 if ( hProcess == NULL )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1142 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1143 if ( krc )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1144 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1145 if ( ::GetLastError() == ERROR_ACCESS_DENIED )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1146 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1147 *krc = ecKILL_ACCESS_DENIED;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1148 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1149 else
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1150 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1151 *krc = ecKILL_NO_PROCESS;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1152 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1153 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1154
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1155 return -1;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1156 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1157
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1158 bool ok = TRUE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1159 switch ( sig )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1160 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1161 case wxSIGKILL:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1162 // kill the process forcefully returning -1 as error code
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1163 if ( !::TerminateProcess(hProcess, (UINT)-1) )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1164 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1165 wxLogSysError(_("Failed to kill process %d"), pid);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1166
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1167 if ( krc )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1168 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1169 // this is not supposed to happen if we could open the
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1170 // process
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1171 *krc = ecKILL_ERROR;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1172 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1173
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1174 ok = FALSE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1175 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1176 break;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1177
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1178 case wxSIGNONE:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1179 // do nothing, we just want to test for process existence
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1180 break;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1181
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1182 default:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1183 // any other signal means "terminate"
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1184 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1185 wxNewFindByPidParams params;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1186 params.pid = (DWORD)pid;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1187
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1188 // EnumWindows() has nice semantics: it returns 0 if it found
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1189 // something or if an error occured and non zero if it
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1190 // enumerated all the window
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1191 if ( !::EnumWindows(wxEnumFindByPidProc, (LPARAM)&params) )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1192 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1193 // did we find any window?
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1194 if ( params.hwnd )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1195 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1196 // tell the app to close
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1197 //
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1198 // NB: this is the harshest way, the app won't have
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1199 // opportunity to save any files, for example, but
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1200 // this is probably what we want here. If not we
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1201 // can also use SendMesageTimeout(WM_CLOSE)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1202 if ( !::PostMessage(params.hwnd, WM_QUIT, 0, 0) )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1203 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1204 wxLogLastError(_T("PostMessage(WM_QUIT)"));
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1205 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1206 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1207 else // it was an error then
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1208 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1209 wxLogLastError(_T("EnumWindows"));
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1210
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1211 ok = FALSE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1212 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1213 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1214 else // no windows for this PID
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1215 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1216 if ( krc )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1217 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1218 *krc = ecKILL_ERROR;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1219 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1220
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1221 ok = FALSE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1222 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1223 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1224 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1225
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1226 // the return code
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1227 DWORD rc;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1228
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1229 if ( ok )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1230 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1231 // as we wait for a short time, we can use just WaitForSingleObject()
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1232 // and not MsgWaitForMultipleObjects()
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1233 switch ( ::WaitForSingleObject(hProcess, 500 /* msec */) )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1234 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1235 case WAIT_OBJECT_0:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1236 // process terminated
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1237 if ( !::GetExitCodeProcess(hProcess, &rc) )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1238 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1239 wxLogLastError(_T("GetExitCodeProcess"));
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1240 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1241 break;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1242
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1243 default:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1244 wxFAIL_MSG( _T("unexpected WaitForSingleObject() return") );
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1245 // fall through
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1246
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1247 case WAIT_FAILED:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1248 wxLogLastError(_T("WaitForSingleObject"));
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1249 // fall through
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1250
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1251 case WAIT_TIMEOUT:
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1252 if ( krc )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1253 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1254 *krc = ecKILL_ERROR;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1255 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1256
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1257 rc = STILL_ACTIVE;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1258 break;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1259 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1260 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1261 else // !ok
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1262 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1263 // just to suppress the warnings about uninitialized variable
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1264 rc = 0;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1265 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1266
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1267 ::CloseHandle(hProcess);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1268
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1269 // the return code is the same as from Unix kill(): 0 if killed
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1270 // successfully or -1 on error
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1271 if ( sig == wxSIGNONE )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1272 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1273 if ( ok && rc == STILL_ACTIVE )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1274 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1275 // there is such process => success
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1276 return 0;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1277 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1278 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1279 else // not SIGNONE
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1280 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1281 if ( ok && rc != STILL_ACTIVE )
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1282 {
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1283 // killed => success
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1284 return 0;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1285 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1286 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1287 #else // Win15
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1288 wxFAIL_MSG( _T("not implemented") );
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1289 #endif // Win32/Win16
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1290
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1291 // error
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1292 return -1;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1293 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1294 #endif
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1295
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1296 int ecKill(long pid, wxSignal sig)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1297 {
517
2b2d9aa25330 * standalone/wxwin/configtooldoc.cpp:
jld
parents: 496
diff changeset
1298 #if defined(__UNIX__) && !defined(__CYGWIN__)
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1299 return wxKill(pid, sig);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1300 #elif defined(__WXMSW__)
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1301 return wxNewKill(pid, sig);
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1302 #else
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1303 return -1;
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1304 #endif
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1305 }
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 160
diff changeset
1306
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1307 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1308 #include <tlhelp32.h>
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1309
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1310 WXHINSTANCE wxProcessKiller::hInstLib1 = VER_PLATFORM_WIN32_NT==wxProcessKiller::GetPlatform()? (WXHINSTANCE) LoadLibrary(_T("PSAPI.DLL")) : (WXHINSTANCE) LoadLibrary(_T("Kernel32.DLL")) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1311 WXHINSTANCE wxProcessKiller::hInstLib2 = VER_PLATFORM_WIN32_NT==wxProcessKiller::GetPlatform()? (WXHINSTANCE) LoadLibrary(_T("NTDLL.DLL")): (WXHINSTANCE) NULL;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1312
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1313 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1314
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1315 const unsigned int wxProcessKiller::PROCESS_KILL_EXIT_CODE=0xCCFFCCFF;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1316
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1317 wxProcessKiller::wxProcessKiller(int pid):
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1318 m_bVerbose(false),
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1319 m_nExitCode(-1),
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1320 m_idProcess(pid)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1321 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1322 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1323 m_hProcess = (WXHANDLE) ::OpenProcess(SYNCHRONIZE |
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1324 PROCESS_TERMINATE |
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1325 PROCESS_QUERY_INFORMATION,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1326 FALSE, // not inheritable
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1327 (DWORD) m_idProcess);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1328 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1329 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1330
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1331 wxProcessKiller::~wxProcessKiller()
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1332 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1333 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1334 if (m_hProcess)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1335 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1336 ::CloseHandle((HANDLE) m_hProcess);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1337 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1338 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1339 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1340
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1341 bool wxProcessKiller::Kill(bool bRecurse)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1342 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1343 wxPInfoArray arPinfo;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1344 bool rc=false;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1345 if(m_idProcess && -1!=m_idProcess){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1346 // Start of with the easy one:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1347 if(bRecurse) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1348 // Need to gather this information before we orphan our grandchildren:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1349 PSExtract(arPinfo);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1350 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1351
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1352 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1353
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1354 if(m_hProcess){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1355 rc=(TRUE==::TerminateProcess((HANDLE) m_hProcess,PROCESS_KILL_EXIT_CODE));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1356 // dtor's (or subsequent Run's) responsibility to close the handle
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1357 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1358
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1359 #else
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1360 rc=(0==kill(m_idProcess,SIGTERM));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1361 int status;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1362 waitpid(m_idProcess,&status,WNOHANG);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1363 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1364
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1365 if(bRecurse) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1366 // kill process *and* its children
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1367 // FIXME: needs to be top-down
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1368 for(int i=0;i<(signed)arPinfo.size();i++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1369 if(arPinfo[i].IsChildOf(m_idProcess)){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1370
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1371 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1372 // begin hack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1373 // WHY NECESSARY??
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1374 const wxString strName(Name(arPinfo[i].PID));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1375 if(_tcsstr(strName,_T("eCosTest")) || _tcsstr(strName,_T("cmd.EXE")) || _tcsstr(strName,_T("CMD.EXE")) || arPinfo[i].PID==(signed)GetCurrentProcessId()){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1376 continue;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1377 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1378 // end hack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1379 HANDLE hProcess=::OpenProcess(PROCESS_TERMINATE,false,arPinfo[i].PID);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1380 if(hProcess){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1381 rc&=(TRUE==::TerminateProcess(hProcess,PROCESS_KILL_EXIT_CODE));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1382 CloseHandle(hProcess);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1383 } else {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1384 rc=false;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1385 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1386 #else
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1387 rc&=(0==kill(arPinfo[i].PID,SIGTERM));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1388 int status;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1389 waitpid(arPinfo[i].PID,&status,WNOHANG);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1390 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1391 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1392 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1393 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1394 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1395 return rc;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1396 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1397
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1398 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1399 bool wxProcessKiller::PSExtract(wxProcessKiller::wxPInfoArray &arPinfo)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1400 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1401 bool rc=false;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1402 arPinfo.clear();
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1403 // If Windows NT:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1404 switch(GetPlatform()) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1405 case VER_PLATFORM_WIN32_NT:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1406 if(hInstLib1) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1407
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1408 // Get procedure addresses.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1409 static BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * ) = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))GetProcAddress( (HINSTANCE) hInstLib1, "EnumProcesses" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1410 if( lpfEnumProcesses) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1411
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1412 if(hInstLib2) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1413
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1414 static DWORD (WINAPI *lpfNtQueryInformationProcess)( HANDLE, int, void *, DWORD, LPDWORD ) =
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1415 (DWORD(WINAPI *)(HANDLE, int, void *, DWORD, LPDWORD)) GetProcAddress( (HINSTANCE) hInstLib2,"NtQueryInformationProcess" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1416
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1417 if(lpfNtQueryInformationProcess){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1418 DWORD dwMaxPids=256;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1419 DWORD dwPidSize;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1420 DWORD *arPids = NULL ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1421 do {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1422 delete [] arPids;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1423 arPids=new DWORD[dwMaxPids];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1424 } while(lpfEnumProcesses(arPids, dwMaxPids, &dwPidSize) && dwPidSize/sizeof(DWORD)==dwMaxPids) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1425
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1426 if(dwPidSize/sizeof(DWORD)<dwMaxPids){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1427 rc=true;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1428 for( DWORD dwIndex = 0 ; (signed)dwIndex < dwPidSize/sizeof(DWORD); dwIndex++ ) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1429 // Regardless of OpenProcess success or failure, we
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1430 // still call the enum func with the ProcID.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1431 DWORD pid=arPids[dwIndex];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1432 HANDLE hProcess=::OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, pid );
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1433 if (hProcess ) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1434 struct {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1435 DWORD ExitStatus; // receives process termination status
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1436 DWORD PebBaseAddress; // receives process environment block address
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1437 DWORD AffinityMask; // receives process affinity mask
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1438 DWORD BasePriority; // receives process priority class
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1439 ULONG UniqueProcessId; // receives process identifier
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1440 ULONG InheritedFromUniqueProcessId; // receives parent process identifier
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1441 } pbi;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1442 memset( &pbi, 0, sizeof(pbi));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1443 DWORD retLen;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1444 __int64 ftCreation,ftExit,ftKernel,ftUser;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1445 if(lpfNtQueryInformationProcess(hProcess, 0 /*ProcessBasicInformation*/, &pbi, sizeof(pbi), &retLen)>=0 &&
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1446 TRUE==::GetProcessTimes (hProcess,(FILETIME *)&ftCreation,(FILETIME *)&ftExit,(FILETIME *)&ftKernel,(FILETIME *)&ftUser)){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1447 // The second test is important. It excludes orphaned processes who appear to have been adopted by virtue of a new
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1448 // process having been created with the same ID as their original parent.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1449 wxPInfo p;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1450 p.PID=pid;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1451 p.PPID=pbi.InheritedFromUniqueProcessId;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1452 p.tCreation=ftCreation;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1453 p.tCpu=Time((ftKernel+ftUser)/10000);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1454 arPinfo.push_back(p);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1455 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1456
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1457 CloseHandle(hProcess);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1458
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1459 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1460 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1461 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1462 delete [] arPids;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1463 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1464 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1465 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1466 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1467 break;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1468 case VER_PLATFORM_WIN32_WINDOWS:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1469
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1470 if( hInstLib1) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1471
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1472 static HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD)=
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1473 (HANDLE(WINAPI *)(DWORD,DWORD))GetProcAddress( (HINSTANCE) hInstLib1,"CreateToolhelp32Snapshot" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1474 static BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32)=
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1475 (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))GetProcAddress( (HINSTANCE) hInstLib1, "Process32First" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1476 static BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32)=
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1477 (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))GetProcAddress( (HINSTANCE) hInstLib1, "Process32Next" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1478 if( lpfProcess32Next && lpfProcess32First && lpfCreateToolhelp32Snapshot) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1479
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1480 // Get a handle to a Toolhelp snapshot of the systems
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1481 // processes.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1482 HANDLE hSnapShot = lpfCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1483 if(INVALID_HANDLE_VALUE != hSnapShot) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1484 // Get the first process' information.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1485 PROCESSENTRY32 procentry;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1486 procentry.dwSize = sizeof(PROCESSENTRY32) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1487 if(lpfProcess32First( hSnapShot, &procentry )){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1488 rc=true;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1489 do {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1490 wxPInfo p;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1491 p.PID=procentry.th32ProcessID;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1492 p.PPID=procentry.th32ParentProcessID;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1493 arPinfo.push_back(p);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1494 } while(lpfProcess32Next( hSnapShot, &procentry ));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1495 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1496 CloseHandle(hSnapShot);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1497 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1498 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1499 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1500 break;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1501 default:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1502 break;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1503 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1504
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1505 SetParents(arPinfo);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1506
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1507 if(!rc){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1508 wxLogError(_T("Couldn't get process information!\n"));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1509 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1510 return rc;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1511 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1512
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1513 #else // UNIX
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1514
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1515 bool wxProcessKiller::PSExtract(wxProcessKiller::wxPInfoArray &arPinfo)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1516 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1517 arPinfo.clear();
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1518 int i;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1519 FILE *f=popen("ps -l",_T("r") MODE_TEXT);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1520 if(f){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1521 char buf[100];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1522 while(fgets(buf,sizeof(buf)-1,f)){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1523 TCHAR discard[100];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1524 wxPInfo p;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1525 // Output is in the form
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1526 // F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1527 //100 S 490 877 876 0 70 0 - 368 wait4 pts/0 00:00:00 bash
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1528 int F,UID,C,PRI,NI,SZ,HH,MM,SS;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1529 bool rc=(15==_stscanf(buf,_T("%d %s %d %d %d %d %d %d %s %d %s %s %d:%d:%d"),&F,discard,&UID,&p.PID,&p.PPID,&C,&PRI,&NI,discard,&SZ,discard,discard,&HH,&MM,&SS));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1530 if(rc){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1531 p.tCpu=1000*(SS+60*(60*HH+MM));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1532 arPinfo.push_back(p);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1533 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1534 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1535 pclose(f);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1536 for(i=0;i<(signed)arPinfo.size();i++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1537 int pid=arPinfo[i].PPID;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1538 arPinfo[i].pParent=0;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1539 for(int j=0;j<(signed)arPinfo.size();j++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1540 if(i!=j && arPinfo[j].PID==pid){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1541 arPinfo[i].pParent=&arPinfo[j];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1542 break;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1543 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1544 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1545 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1546 } else {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1547 wxLogError(_T("Failed to run ps -l\n"));
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1548 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1549 return true; //FIXME
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1550 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1551
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1552 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1553
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1554 void wxProcessKiller::SetParents(wxProcessKiller::wxPInfoArray &arPinfo)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1555 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1556 int i;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1557 for(i=0;i<(signed)arPinfo.size();i++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1558 wxPInfo &p=arPinfo[i];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1559 p.pParent=0;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1560 for(int j=0;j<(signed)arPinfo.size();j++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1561 if(arPinfo[j].PID==p.PPID
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1562 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1563 && arPinfo[j].tCreation<p.tCreation
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1564 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1565 )
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1566 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1567 arPinfo[i].pParent=&arPinfo[j];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1568 break;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1569 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1570 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1571 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1572
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1573 // Check for circularity
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1574 bool bCircularity=false;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1575 for(i=0;i<(signed)arPinfo.size();i++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1576 wxPInfo *p=&arPinfo[i];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1577 for(int j=0;j<(signed)arPinfo.size() && p;j++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1578 p=p->pParent;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1579 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1580 // If all is well, p should be NULL here. Otherwise we have a loop.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1581 if(p){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1582 // Make sure it can't foul things up:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1583 arPinfo[i].pParent=0;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1584 bCircularity=true;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1585 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1586 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1587
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1588 if(bCircularity){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1589 wxLogError(_T("!!! Circularly linked process list at index %d\n"),i);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1590 for(int k=0;k<(signed)arPinfo.size();k++){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1591 const wxPInfo &p=arPinfo[k];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1592 wxLogError(_T("%d: %s ppid=%4d\n"),k,(LPCTSTR)Name(p.PID),p.PPID);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1593 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1594 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1595 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1596
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1597 bool wxProcessKiller::wxPInfo::IsChildOf(int pid) const
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1598 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1599 for(wxPInfo *p=pParent;p && p!=this;p=p->pParent) { // guard against circular linkage
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1600 if(p->PID==pid){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1601 return true;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1602 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1603 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1604 return false;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1605 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1606
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1607 const wxString wxProcessKiller::Name(int pid)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1608 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1609 wxString str;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1610 str.Printf(_T("id=%d"),pid);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1611 #ifdef _DEBUG
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1612 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1613 if(VER_PLATFORM_WIN32_NT==GetPlatform() && hInstLib1){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1614 static BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, DWORD, LPDWORD ) =
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1615 (BOOL(WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD)) GetProcAddress( (HINSTANCE) hInstLib1,"EnumProcessModules" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1616 static DWORD (WINAPI *lpfGetModuleFileNameEx)( HANDLE, HMODULE, LPTSTR, DWORD )=
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1617 (DWORD (WINAPI *)(HANDLE, HMODULE,LPTSTR, DWORD )) GetProcAddress( (HINSTANCE) hInstLib1,"GetModuleFileNameExA" ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1618 if( lpfEnumProcessModules && lpfGetModuleFileNameEx ) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1619 HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1620 if(hProcess) {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1621 HMODULE hMod;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1622 DWORD dwSize;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1623 if(lpfEnumProcessModules( hProcess, &hMod, sizeof(HMODULE), &dwSize ) ){
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1624 // Get Full pathname:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1625 TCHAR buf[1+MAX_PATH];
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1626 lpfGetModuleFileNameEx( hProcess, hMod, buf, MAX_PATH);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1627 str+=_TCHAR(' ');
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1628 str+=buf;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1629 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1630 CloseHandle(hProcess);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1631 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1632 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1633 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1634 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1635 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1636 return str;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1637 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1638
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1639 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1640 long wxProcessKiller::GetPlatform()
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1641 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1642 OSVERSIONINFO osver;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1643 osver.dwOSVersionInfoSize = sizeof( osver ) ;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1644 return GetVersionEx( &osver ) ? (long) osver.dwPlatformId : (long)-1;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1645 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1646 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1647
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1648 const wxString wxProcessKiller::ErrorString() const
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1649 {
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1650 #ifdef _WIN32
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1651 TCHAR *pszMsg;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1652 FormatMessage(
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1653 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1654 NULL,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1655 m_nErr,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1656 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1657 (LPTSTR)&pszMsg,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1658 0,
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1659 NULL
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1660 );
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1661 return pszMsg;
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1662 #else
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1663 return strerror(errno);
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1664 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1665 }
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1666