Mercurial > nand-ecoscentric
annotate host/tools/configtool/standalone/wxwin/ecutils.cpp @ 931:d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
wxString wrappers for cygwin_conv_to_*_path().
* standalone/wxwin/appsettings.cpp: Accommodate POSIX-style values of
the ECOS_REPOSITORY environment variable.
| author | jld |
|---|---|
| date | Fri, 11 Apr 2003 10:22:36 +0000 |
| parents | 2b2d9aa25330 |
| children | 480aa5d146e3 |
| rev | line source |
|---|---|
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1 //####COPYRIGHTBEGIN#### |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
3 // ---------------------------------------------------------------------------- |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
4 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
931
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
5 // Copyright (C) 2003 John Dallaway |
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
7 // This program is part of the eCos host tools. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
8 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
9 // This program is free software; you can redistribute it and/or modify it |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
10 // under the terms of the GNU General Public License as published by the Free |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
11 // Software Foundation; either version 2 of the License, or (at your option) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
12 // any later version. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
13 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
14 // This program is distributed in the hope that it will be useful, but WITHOUT |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
15 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
16 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
17 // more details. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
18 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
19 // You should have received a copy of the GNU General Public License along with |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
20 // this program; if not, write to the Free Software Foundation, Inc., |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
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 //####COPYRIGHTEND#### |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
26 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
27 //=========================================================================== |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
28 //=========================================================================== |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
29 //#####DESCRIPTIONBEGIN#### |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
30 // |
|
931
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
31 // Author(s): sdf, jld |
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
32 // Contact(s): sdf |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
33 // Date: 1998/08/11 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
34 // Version: 0.01 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
35 // Purpose: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
36 // 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
|
37 // 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
|
38 // Requires: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
39 // Provides: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
40 // See also: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
41 // Known bugs: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
42 // Usage: |
|
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 //####DESCRIPTIONEND#### |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
45 // |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
46 //=========================================================================== |
|
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 #ifdef __GNUG__ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
49 #pragma implementation "ecutils.h" |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
50 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
51 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
52 // Includes other headers for precompiled compilation |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
53 #include "ecpch.h" |
|
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 #ifdef __BORLANDC__ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
56 #pragma hdrstop |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
57 #endif |
|
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 "ecutils.h" |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
60 #include "wx/listctrl.h" |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
61 #include "wx/stream.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 #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
|
64 #include <sys/types.h> |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
65 #include <sys/stat.h> |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
66 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
67 #ifndef __WXMSW__ |
| 496 | 68 #include <errno.h> |
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
69 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
70 |
|
163
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
71 #ifdef __WXMSW__ |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
72 #include <tlhelp32.h> |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
73 #endif |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
74 |
|
931
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
75 #ifdef __CYGWIN__ |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
76 #include <sys/cygwin.h> /* for cygwin_conv_to_*_path() */ |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
77 #endif |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
78 |
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
79 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
80 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
81 #define INCLUDEFILE <string> |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
82 #include "IncludeSTL.h" |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
83 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
84 #endif |
|
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 // 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
|
87 // " and \ have usual semantics |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
88 // 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
|
89 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
90 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
|
91 bool bObserveStrings/*=false*/,bool bBackslashQuotes/*=false*/) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
92 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
93 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
94 if(wxT(' ') == cSep) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
95 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
96 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
|
97 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
98 wxASSERT(wxT('\0')!=cSep); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
99 wxChar c[2]={cSep,wxT('\0')}; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
100 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
|
101 } |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
104 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
|
105 bool bObserveStrings/*=false*/,bool bBackslashQuotes/*=false*/) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
106 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
107 ar.Clear(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
108 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
109 const wxChar* pszSep = (const wxChar*) sep; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
110 const wxChar* psz = (const wxChar*) str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
111 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
112 int i=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
113 for(;;){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
114 // Skip multiple separators |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
115 while(*psz && wxStrchr(pszSep,*psz)){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
116 psz++; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
117 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
118 if(!*psz){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
119 return i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
120 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
121 wxString strTok; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
122 if(bObserveStrings){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
123 bool bInString=FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
124 do{ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
125 if(*psz == wxT('\\') && bBackslashQuotes && psz[1]){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
126 strTok += psz[1]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
127 psz++; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
128 } else if(*psz == wxT('"')){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
129 bInString ^= 1; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
130 } 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
|
131 break; |
|
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 strTok+=*psz; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
134 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
135 } while (*++psz); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
136 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
137 const wxChar* pszStart=psz; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
138 do { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
139 psz++; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
140 } while (*psz && ! wxStrchr(pszSep,*psz)); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
141 strTok=wxString(pszStart,psz-pszStart); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
142 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
143 ar.Add(strTok); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
144 i++; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
145 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
146 return ar.GetCount(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
147 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
148 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
149 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
150 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
151 // vararg-style message box formatter |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
152 int ecUtils::MessageBoxF (LPCTSTR pszFormat, ...) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
153 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
154 int rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
155 va_list args; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
156 va_start(args, pszFormat); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
157 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
|
158 va_end(args); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
159 return rc; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
162 // 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
|
163 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
|
164 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
165 int rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
166 va_list args; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
167 va_start(args, pszFormat); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
168 rc=ecUtils::vMessageBox(nType, pszFormat,args); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
169 va_end(args); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
170 return rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
171 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
172 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
173 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
|
174 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
175 int rc=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
176 for(int nLength=100;nLength;) { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
177 TCHAR *buf=new TCHAR[1+nLength]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
178 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
|
179 if(-1==n){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
180 nLength*=2; // NT behavior |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
181 } else if (n<nLength){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
182 rc=AfxMessageBox(buf,nType); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
183 nLength=0; // trigger exit from loop |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
184 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
185 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
|
186 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
187 delete [] buf; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
188 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
189 return rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
190 } |
|
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 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
193 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
194 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
|
195 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
196 wxChar* pEnd; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
197 bool rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
198 errno=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
199 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
|
200 //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
|
201 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
|
202 rc=(0==errno && (*pEnd==wxT('\0'))); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
203 return rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
204 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
205 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
206 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
|
207 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
208 wxString s; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
209 s.Printf(bHex?wxT("0x%08x"):wxT("%d"),d); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
210 return s; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
211 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
212 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
213 const wxString ecUtils::DoubleToStr (double dValue) |
|
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 wxString s; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
216 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
|
217 return s; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
218 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
219 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
220 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
|
221 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
222 wxChar* pEnd; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
223 errno = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
224 //dValue = _tcstod (strValue, &pEnd); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
225 dValue = wxStrtod(strValue, &pEnd); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
226 return (0 == errno) && (*pEnd == wxT('\0')); |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
229 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
230 const wxString ecUtils::Explanation(CFileException & exc) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
231 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
232 wxString strMsg; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
233 switch(exc.m_cause){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 default: |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
250 strMsg=wxT(" Unknown cause"); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
251 break; |
|
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 return strMsg; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
256 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
257 const wxString ecUtils::LoadString(UINT id) |
|
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 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
260 str.LoadString(id); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
261 return str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
262 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
263 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
264 |
|
931
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
265 const wxString ecUtils::NativeToPosixPath(const wxString & native) |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
266 { |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
267 #ifdef __CYGWIN__ |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
268 if (native.IsEmpty()) |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
269 return native; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
270 else |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
271 { |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
272 wxString posix; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
273 cygwin_conv_to_posix_path(native.c_str(), posix.GetWriteBuf(MAXPATHLEN + 1)); |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
274 posix.UngetWriteBuf(); |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
275 return posix; |
|
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 #else |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
278 return native; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
279 #endif |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
280 } |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
281 |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
282 const wxString ecUtils::PosixToNativePath(const wxString & posix) |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
283 { |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
284 #ifdef __CYGWIN__ |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
285 if (posix.IsEmpty()) |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
286 return posix; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
287 else |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
288 { |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
289 wxString native; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
290 cygwin_conv_to_win32_path(posix.c_str(), native.GetWriteBuf(MAXPATHLEN + 1)); |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
291 native.UngetWriteBuf(); |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
292 return native; |
|
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 #else |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
295 return posix; |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
296 #endif |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
297 } |
|
d7c9117adc25
* standalone/wxwin/ecutils.cpp, standalone/wxwin/ecutils.h: Create
jld
parents:
517
diff
changeset
|
298 |
|
160
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
299 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
|
300 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
301 wxString strPath,strOldPath; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
302 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
303 if (wxGetEnv(wxT("PATH"), & strOldPath)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
304 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
305 // 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
|
306 if(bAtFront) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
307 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
308 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
|
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 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
|
312 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
313 } else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
314 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
315 // unlikely, but ... |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
316 strPath = strFolder; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
317 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
318 return (TRUE == wxSetEnv(wxT("PATH"),strPath)); |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
321 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
322 wxString ecUtils::GetLastErrorMessageString() |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
323 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
324 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
325 PTCHAR pszMsg; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
326 FormatMessage( |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
327 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
|
328 NULL, |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
329 GetLastError(), |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
330 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
|
331 (LPTSTR)&pszMsg, |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
332 0, |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
333 NULL |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
334 ); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
335 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
336 // Display the string. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
337 str=pszMsg; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
338 str.TrimRight(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
339 // Free the buffer. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
340 LocalFree(pszMsg); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
341 return str; |
|
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 } |
|
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 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
|
346 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
347 bool rc=false; |
|
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 if(!strViewer.IsEmpty())//use custom editor |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
350 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
351 wxString strCmdline(strViewer); |
|
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 PTCHAR pszCmdLine=strCmdline.GetBuffer(strCmdline.GetLength()); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
354 GetShortPathName(pszCmdLine,pszCmdLine,strCmdline.GetLength()); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
355 strCmdline.ReleaseBuffer(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
356 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
357 strCmdline+=_TCHAR(' '); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
358 strCmdline+=strFileName; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
359 PROCESS_INFORMATION pi; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
360 STARTUPINFO si; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
361 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
362 si.cb = sizeof(STARTUPINFO); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
363 si.lpReserved = NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
364 si.lpReserved2 = NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
365 si.cbReserved2 = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
366 si.lpDesktop = NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
367 si.dwFlags = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
368 si.lpTitle=NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
369 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
370 if(CreateProcess( |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
371 NULL, // app name |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
372 //strCmdline.GetBuffer(strCmdline.GetLength()), // command line |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
373 strCmdline.GetBuffer(strCmdline.GetLength()), // command line |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
374 NULL, // process security |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
375 NULL, // thread security |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
376 TRUE, // inherit handles |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
377 0, |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
378 NULL, // environment |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
379 NULL, // current dir |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
380 &si, // startup info |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
381 &pi)){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
382 CloseHandle(pi.hProcess); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
383 CloseHandle(pi.hThread); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
384 rc=true; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
385 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
386 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
|
387 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
388 strCmdline.ReleaseBuffer(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
389 } else {// Use association |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
390 TCHAR szExe[MAX_PATH]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
391 HINSTANCE h=FindExecutable(strFileName,wxT("."),szExe); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
392 if(int(h)<=32){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
393 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
394 switch(int(h)){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 default: break; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
401 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
402 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
|
403 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
404 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
405 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
|
406 strFileName, NULL, NULL, SW_SHOWNORMAL, AfxGetInstanceHandle( )}; |
|
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 sei.hInstApp=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
409 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
|
410 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
|
411 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
412 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
413 switch(int(hInst)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
414 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 //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
|
426 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
|
427 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
|
428 //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
|
429 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
|
430 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
|
431 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
432 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
|
433 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
434 rc=true; |
|
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 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
438 return rc; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
439 } |
|
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 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
442 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
443 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
|
444 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
445 int nLength=1 + wxStrlen(str); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
446 psz=new char[nLength]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
447 #ifdef _UNICODE |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
448 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
|
449 #else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
450 strcpy(psz,str); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
451 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
452 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
453 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
454 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
|
455 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
456 std::string stdstr; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
457 char *psz; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
458 UnicodeToCStr(str,psz); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
459 stdstr=std::string(psz); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
460 delete psz; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
461 return stdstr; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
462 } |
|
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 // 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
|
465 // 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
|
466 // replaced by a single space |
|
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 static bool ecIsSpace(wxChar ch) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
469 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
470 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
|
471 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
472 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
473 wxString ecUtils::StripExtraWhitespace (const wxString & strInput) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
474 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
475 wxString strOutput; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
476 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
|
477 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
|
478 if(ecIsSpace(*c)){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
479 *o++=wxT(' '); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
480 if (ecIsSpace(c[1])){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
481 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
|
482 c--; |
|
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 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
485 *o++=*c; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
486 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
487 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
488 *o=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
489 strOutput.UngetWriteBuf(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
490 strOutput.Trim(TRUE); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
491 strOutput.Trim(FALSE); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
492 return strOutput; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
493 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
494 wxString strOutput; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
495 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
|
496 for(LPCTSTR c=strInput;*c;c++){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
497 if(_istspace(*c)){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
498 *o++=_TCHAR(' '); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
499 if (_istspace(c[1])){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
500 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
|
501 c--; |
|
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 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
504 *o++=*c; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
505 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
506 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
507 *o=0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
508 strOutput.ReleaseBuffer(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
509 strOutput.TrimLeft(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
510 strOutput.TrimRight(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
511 return strOutput; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
512 #endif |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
515 #if 0 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
516 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
|
517 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
518 // 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
|
519 // Change / to \ throughout |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
520 ecFileName |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
521 strPath(str.c_str()); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
522 strPath.Replace (_TCHAR('/'), _TCHAR('\\')); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
523 return strPath; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
524 } |
|
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 // Copy file helper function. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
527 // 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
|
528 // 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
|
529 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
530 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
|
531 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
532 // 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
|
533 bool rc=false; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
534 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
535 struct _stat s1,s2; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
536 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
|
537 // 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
|
538 FILE *f1=_tfopen(pszSource,wxT("rb")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
539 if(f1){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
540 FILE *f2=_tfopen(pszDest,wxT("rb")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
541 if(f2){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
542 int nSize1,nSize2; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
543 rc=true; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
544 do{ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
545 char buf1[4096],buf2[4096]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
546 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
|
547 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
|
548 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
|
549 rc=false; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
550 break; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
551 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
552 } while (nSize1>0); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
553 fclose(f2); |
|
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 fclose(f1); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
556 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
557 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
558 |
|
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 // Files are identical |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
561 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
562 rc=TRUE==::CopyFile(pszSource,pszDest,FALSE); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
563 if(rc){ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
564 } else { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
565 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
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
569 return rc; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
572 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
573 |
|
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 * wxStringToStringMap |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
576 * |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
577 * Stores string values keyed by strings |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
578 */ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
579 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
580 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
|
581 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
582 wxString oldValue; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
583 if (Find(key, oldValue)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
584 Remove(key); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
585 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
|
586 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
587 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
588 bool wxStringToStringMap::Remove(const wxString& key) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
589 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
590 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
|
591 if (str) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
592 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
593 delete str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
594 return TRUE; |
|
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 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
597 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
598 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
599 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
600 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
|
601 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
602 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
|
603 if (str) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
604 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
605 value = * str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
606 return TRUE; |
|
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 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
609 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
610 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
611 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
612 void wxStringToStringMap::Clear() |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
613 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
614 m_hashTable.BeginFind(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
615 wxNode* node; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
616 while ((node = m_hashTable.Next())) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
617 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
618 wxString* str = (wxString*) node->Data(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
619 delete str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
620 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
621 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
622 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
623 void wxStringToStringMap::BeginFind() |
|
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 m_hashTable.BeginFind(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
626 } |
|
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 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
|
629 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
630 wxNode* node = m_hashTable.Next(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
631 if (node) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
632 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
633 value = * (wxString*) node->Data(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
634 return TRUE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
635 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
636 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
637 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
638 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
639 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
640 // Is str a member of arr? |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
641 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
|
642 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
643 size_t i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
644 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
|
645 if (arr[i] == str) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
646 return TRUE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
647 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
648 return FALSE; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
651 // Eliminate .. and . |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
652 wxString wxGetRealPath(const wxString& path) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
653 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
654 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
|
655 wxStrcpy(p, (const wxChar*) path); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
656 wxRealPath(p); |
|
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 wxString str(p); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
659 delete[] p; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
660 return str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
661 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
662 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
663 // 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
|
664 // if 'path' is relative |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
665 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
|
666 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
667 wxString path1(path); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
668 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
669 if (!wxIsAbsolutePath(path)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
670 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
671 path1 = cwd; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
672 if (path1.Last() != wxFILE_SEP_PATH) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
673 path1 += wxFILE_SEP_PATH; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
674 path1 += path; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
675 } |
|
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 return wxGetRealPath(path1); |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
680 // 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
|
681 // argv0 is wxTheApp->argv[0] |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
682 // 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
|
683 // 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
|
684 // MYAPPDIR. This is checked first. |
|
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 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
|
687 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
688 wxString str; |
|
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 // Try appVariableName |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
691 if (!appVariableName.IsEmpty()) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
692 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
693 str = wxGetenv(appVariableName); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
694 if (!str.IsEmpty()) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
695 return str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
696 } |
|
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 if (wxIsAbsolutePath(argv0)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
699 return wxPathOnly(argv0); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
700 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
701 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
702 // Is it a relative path? |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
703 wxString currentDir(cwd); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
704 if (currentDir.Last() != wxFILE_SEP_PATH) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
705 currentDir += wxFILE_SEP_PATH; |
|
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 str = currentDir + argv0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
708 if (wxFileExists(str)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
709 return wxPathOnly(str); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
710 } |
|
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 // 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
|
713 // Search PATH. |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
714 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
715 wxPathList pathList; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
716 pathList.AddEnvList(wxT("PATH")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
717 str = pathList.FindAbsoluteValidPath(argv0); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
718 if (!str.IsEmpty()) |
|
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 // Failed |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
722 return wxEmptyString; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
723 } |
|
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 // 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
|
726 // 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
|
727 wxString ecMakeNameFromPath(const wxString& path) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
728 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
729 wxString p(path); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
730 p.Replace(wxT("/"), wxT("_")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
731 p.Replace(wxT("\\"), wxT("_")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
732 p.Replace(wxT(":"), wxT("_")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
733 return p; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
736 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
737 // 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
|
738 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
|
739 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
740 wxListItem listItem; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
741 listItem.m_mask = wxLIST_MASK_TEXT; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
742 listItem.m_itemId = item; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
743 listItem.m_col = col; |
|
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 if (listCtrl.GetItem(listItem)) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
746 return listItem.m_text; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
747 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
748 return wxEmptyString; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
751 // Select the given item |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
752 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
|
753 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
754 long n = listCtrl.GetItemCount(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
755 long i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
756 if (deselectOthers) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
757 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
758 for (i = 0; i < n; i++) |
|
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 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
|
761 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
762 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
|
763 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
764 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
765 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
766 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
|
767 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
768 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
769 // Find the selection |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
770 long wxListCtrlGetSelection(wxListCtrl& listCtrl) |
|
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 long n = listCtrl.GetItemCount(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
773 long i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
774 for (i = 0; i < n; i++) |
|
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 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
|
777 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
778 return i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
779 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
780 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
781 return -1; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
782 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
783 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
784 // 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
|
785 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
|
786 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
787 int col = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
788 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
789 // Find which column we're on |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
790 int width = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
791 int i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
792 for (i = 0; i < noCols; i++) |
|
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 width += listCtrl.GetColumnWidth(i); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
795 if (x <= width) |
|
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 col = i; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
798 break; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
799 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
800 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
801 return col; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
802 } |
|
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 // Utility function |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
805 void wxRefreshControls(wxWindow* win) |
|
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 wxNode *node = win->GetChildren().First(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
808 while (node) |
|
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 wxWindow* win = (wxWindow*) node->Data(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
811 win->Refresh(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
812 node = node->Next(); |
|
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 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
815 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
816 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
|
817 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
818 stream.Write(s, s.Length()); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
819 return stream; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
820 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
821 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
822 wxOutputStream& operator <<(wxOutputStream& stream, long l) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
823 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
824 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
825 str.Printf("%ld", l); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
826 return stream << str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
827 } |
|
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 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
|
830 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
831 wxString str; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
832 str.Printf("%c", c); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
833 return stream << str; |
|
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 /* |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
837 * ecDialog |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
838 * 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
|
839 * 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
|
840 * 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
|
841 */ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
842 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
843 IMPLEMENT_CLASS(ecDialog, wxDialog) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
844 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
845 BEGIN_EVENT_TABLE(ecDialog, wxDialog) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
846 #ifdef __WXMSW__ |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
847 EVT_SIZE(ecDialog::OnSize) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
848 #endif |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
849 END_EVENT_TABLE() |
|
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 void ecDialog::OnSize(wxSizeEvent& event) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
852 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
853 wxDialog::OnSize(event); |
|
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 wxRefreshControls(this); |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
858 /* |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
859 * 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
|
860 */ |
|
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 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
|
863 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
864 wxNode* node = m_settings.First(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
865 while (node) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
866 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
867 wxWindowSettingsObject* obj = (wxWindowSettingsObject*) node->Data(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
868 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
|
869 return obj; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
870 node = node->Next(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
871 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
872 return NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
873 } |
|
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 bool wxWindowSettings::LoadConfig(wxConfigBase& config) |
|
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 unsigned int i = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
878 for (i = 0; i < GetCount(); i++) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
879 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
880 wxWindowSettingsObject* obj = GetNth(i); |
|
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 wxString name(obj->m_windowName); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
883 name.Replace(wxT(" "), wxT("")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
884 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
885 LoadFont(config, name, obj->m_font); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
886 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
887 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
888 return TRUE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
889 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
890 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
891 bool wxWindowSettings::SaveConfig(wxConfigBase& config) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
892 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
893 unsigned int i = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
894 for (i = 0; i < GetCount(); i++) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
895 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
896 wxWindowSettingsObject* obj = GetNth(i); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
897 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
898 wxString name(obj->m_windowName); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
899 name.Replace(wxT(" "), wxT("")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
900 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
901 SaveFont(config, name, obj->m_font); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
902 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
903 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
904 return TRUE; |
|
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 // Load and save font descriptions |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
908 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
|
909 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
910 wxString pathBase(wxT("/Fonts/")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
911 pathBase += windowName; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
912 pathBase += wxT("/"); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
913 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
914 int pointSize, family, style, weight; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
915 bool underlined = FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
916 wxString faceName; |
|
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 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
|
919 return FALSE; |
|
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 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
|
922 return FALSE; |
|
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 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
|
925 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
926 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
927 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
|
928 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
929 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
930 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
|
931 config.Read(pathBase + wxT("FaceName"), & faceName); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
932 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
933 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
|
934 font = font1; |
|
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 return TRUE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
937 } |
|
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 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
|
940 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
941 if (!font.Ok()) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
942 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
943 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
944 wxString pathBase(wxT("/Fonts/")); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
945 pathBase += windowName; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
946 pathBase += wxT("/"); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
947 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
948 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
|
949 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
|
950 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
|
951 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
|
952 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
|
953 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
|
954 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
955 return TRUE; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
958 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
|
959 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
960 wxWindowSettingsObject* obj = FindSettings(name); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
961 if (!obj) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
962 return wxFont(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
963 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
964 return obj->m_font; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
967 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
|
968 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
969 wxWindowSettingsObject* obj = FindSettings(name); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
970 if (!obj) |
|
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 obj = new wxWindowSettingsObject(name, NULL) ; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
973 obj->m_font = font; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
974 m_settings.Append(obj); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
975 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
976 obj->m_font = font; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
977 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
978 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
979 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
|
980 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
981 wxWindowSettingsObject* obj = FindSettings(name); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
982 if (!obj) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
983 return NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
984 if (obj->m_arrWindow.GetCount() > 0) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
985 return (wxWindow*) obj->m_arrWindow[0]; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
986 else |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
987 return NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
988 } |
|
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 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
|
991 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
992 wxWindowSettingsObject* obj = FindSettings(name); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
993 if (!obj) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
994 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
995 obj = new wxWindowSettingsObject(name, win) ; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
996 m_settings.Append(obj); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
997 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
998 obj->m_arrWindow.Clear(); |
|
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 if (win) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1001 obj->m_arrWindow.Add(win); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1002 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1003 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1004 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
|
1005 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1006 wxWindowSettingsObject* obj = FindSettings(name); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1007 if (!obj) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1008 return NULL; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1009 return & obj->m_arrWindow ; |
|
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 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
|
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 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1017 obj = new wxWindowSettingsObject(name, NULL) ; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1018 m_settings.Append(obj); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1019 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1020 obj->m_arrWindow.Clear() ; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1021 obj->m_arrWindow = arr; |
|
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 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1024 bool wxWindowSettings::ApplyFontsToWindows() |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1025 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1026 if (m_useDefaults) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1027 return FALSE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1028 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1029 unsigned int i = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1030 for (i = 0; i < GetCount(); i++) |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1031 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1032 wxWindowSettingsObject* obj = GetNth(i); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1033 |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1034 unsigned int j = 0; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1035 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
|
1036 { |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1037 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
|
1038 win->SetFont(obj->m_font); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1039 win->Refresh(); |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1040 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1041 } |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1042 return TRUE; |
|
0d0f03f76f6a
Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents:
diff
changeset
|
1043 } |
|
163
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1044 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1045 #ifdef __WIN32__ |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1046 // 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
|
1047 // 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
|
1048 enum ecKillError |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1049 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1050 ecKILL_OK, // no error |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1051 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
|
1052 ecKILL_ACCESS_DENIED, // permission denied |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1053 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
|
1054 ecKILL_ERROR // another, unspecified error |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1055 }; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1056 #endif |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1057 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1058 // ---------------------------------------------------------------------------- |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1059 // process management |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1060 // ---------------------------------------------------------------------------- |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1061 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1062 #ifdef __WIN32__ |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1063 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1064 // 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
|
1065 struct wxNewFindByPidParams |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1066 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1067 wxNewFindByPidParams() { hwnd = 0; pid = 0; } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1068 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1069 // 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
|
1070 HWND hwnd; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1071 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1072 // 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
|
1073 DWORD pid; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1074 }; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1075 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1076 // 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
|
1077 // 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
|
1078 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
|
1079 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1080 DWORD pid; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1081 (void)::GetWindowThreadProcessId(hwnd, &pid); |
|
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 wxNewFindByPidParams *params = (wxNewFindByPidParams *)lParam; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1084 if ( pid == params->pid ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1085 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1086 // remember the window we found |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1087 params->hwnd = hwnd; |
|
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 // 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
|
1090 return FALSE; |
|
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 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1093 // continue enumeration |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1094 return TRUE; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1095 } |
|
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 // 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
|
1098 // 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
|
1099 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
|
1100 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1101 #ifdef __WIN32__ |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1102 // 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
|
1103 HANDLE hProcess = ::OpenProcess(SYNCHRONIZE | |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1104 PROCESS_TERMINATE | |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1105 PROCESS_QUERY_INFORMATION, |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1106 FALSE, // not inheritable |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1107 (DWORD)pid); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1108 if ( hProcess == NULL ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1109 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1110 if ( krc ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1111 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1112 if ( ::GetLastError() == ERROR_ACCESS_DENIED ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1113 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1114 *krc = ecKILL_ACCESS_DENIED; |
|
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 else |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1117 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1118 *krc = ecKILL_NO_PROCESS; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1119 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1120 } |
|
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 -1; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1123 } |
|
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 bool ok = TRUE; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1126 switch ( sig ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1127 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1128 case wxSIGKILL: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1129 // 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
|
1130 if ( !::TerminateProcess(hProcess, (UINT)-1) ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1131 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1132 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
|
1133 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1134 if ( krc ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1135 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1136 // 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
|
1137 // process |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1138 *krc = ecKILL_ERROR; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1139 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1140 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1141 ok = FALSE; |
|
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 break; |
|
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 case wxSIGNONE: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1146 // 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
|
1147 break; |
|
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 default: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1150 // any other signal means "terminate" |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1151 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1152 wxNewFindByPidParams params; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1153 params.pid = (DWORD)pid; |
|
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 // 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
|
1156 // 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
|
1157 // enumerated all the window |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1158 if ( !::EnumWindows(wxEnumFindByPidProc, (LPARAM)¶ms) ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1159 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1160 // did we find any window? |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1161 if ( params.hwnd ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1162 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1163 // tell the app to close |
|
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 // 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
|
1166 // 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
|
1167 // 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
|
1168 // 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
|
1169 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
|
1170 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1171 wxLogLastError(_T("PostMessage(WM_QUIT)")); |
|
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 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
|
1175 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1176 wxLogLastError(_T("EnumWindows")); |
|
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 ok = FALSE; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1179 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1180 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1181 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
|
1182 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1183 if ( krc ) |
|
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 *krc = ecKILL_ERROR; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1186 } |
|
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 ok = FALSE; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1189 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1190 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1191 } |
|
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 // the return code |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1194 DWORD rc; |
|
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 if ( ok ) |
|
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 // 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
|
1199 // and not MsgWaitForMultipleObjects() |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1200 switch ( ::WaitForSingleObject(hProcess, 500 /* msec */) ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1201 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1202 case WAIT_OBJECT_0: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1203 // process terminated |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1204 if ( !::GetExitCodeProcess(hProcess, &rc) ) |
|
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 wxLogLastError(_T("GetExitCodeProcess")); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1207 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1208 break; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1209 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1210 default: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1211 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
|
1212 // fall through |
|
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 case WAIT_FAILED: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1215 wxLogLastError(_T("WaitForSingleObject")); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1216 // fall through |
|
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 case WAIT_TIMEOUT: |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1219 if ( krc ) |
|
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 *krc = ecKILL_ERROR; |
|
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 rc = STILL_ACTIVE; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1225 break; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1226 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1227 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1228 else // !ok |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1229 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1230 // 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
|
1231 rc = 0; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1232 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1233 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1234 ::CloseHandle(hProcess); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1235 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1236 // 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
|
1237 // successfully or -1 on error |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1238 if ( sig == wxSIGNONE ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1239 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1240 if ( ok && rc == STILL_ACTIVE ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1241 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1242 // there is such process => success |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1243 return 0; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1244 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1245 } |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1246 else // not SIGNONE |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1247 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1248 if ( ok && rc != STILL_ACTIVE ) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1249 { |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1250 // killed => success |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1251 return 0; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1252 } |
|
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 #else // Win15 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1255 wxFAIL_MSG( _T("not implemented") ); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1256 #endif // Win32/Win16 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1257 |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1258 // error |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1259 return -1; |
|
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 #endif |
|
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 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
|
1264 { |
| 517 | 1265 #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
|
1266 return wxKill(pid, sig); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1267 #elif defined(__WXMSW__) |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1268 return wxNewKill(pid, sig); |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1269 #else |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1270 return -1; |
|
0d2b193a635f
Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents:
160
diff
changeset
|
1271 #endif |
|
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 |
|
182
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1274 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1275 #include <tlhelp32.h> |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1276 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1277 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
|
1278 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
|
1279 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1280 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1281 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1282 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
|
1283 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1284 wxProcessKiller::wxProcessKiller(int pid): |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1285 m_bVerbose(false), |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1286 m_nExitCode(-1), |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1287 m_idProcess(pid) |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1288 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1289 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1290 m_hProcess = (WXHANDLE) ::OpenProcess(SYNCHRONIZE | |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1291 PROCESS_TERMINATE | |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1292 PROCESS_QUERY_INFORMATION, |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1293 FALSE, // not inheritable |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1294 (DWORD) m_idProcess); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1295 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1296 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1297 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1298 wxProcessKiller::~wxProcessKiller() |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1299 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1300 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1301 if (m_hProcess) |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1302 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1303 ::CloseHandle((HANDLE) m_hProcess); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1304 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1305 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1306 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1307 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1308 bool wxProcessKiller::Kill(bool bRecurse) |
|
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 wxPInfoArray arPinfo; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1311 bool rc=false; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1312 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
|
1313 // 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
|
1314 if(bRecurse) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1315 // 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
|
1316 PSExtract(arPinfo); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1317 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1318 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1319 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1320 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1321 if(m_hProcess){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1322 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
|
1323 // 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
|
1324 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1325 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1326 #else |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1327 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
|
1328 int status; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1329 waitpid(m_idProcess,&status,WNOHANG); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1330 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1331 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1332 if(bRecurse) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1333 // kill process *and* its children |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1334 // 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
|
1335 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
|
1336 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
|
1337 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1338 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1339 // begin hack |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1340 // WHY NECESSARY?? |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1341 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
|
1342 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
|
1343 continue; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1344 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1345 // end hack |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1346 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
|
1347 if(hProcess){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1348 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
|
1349 CloseHandle(hProcess); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1350 } else { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1351 rc=false; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1352 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1353 #else |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1354 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
|
1355 int status; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1356 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
|
1357 #endif |
|
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 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1360 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1361 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1362 return rc; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1363 } |
|
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 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1366 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
|
1367 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1368 bool rc=false; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1369 arPinfo.clear(); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1370 // If Windows NT: |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1371 switch(GetPlatform()) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1372 case VER_PLATFORM_WIN32_NT: |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1373 if(hInstLib1) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1374 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1375 // Get procedure addresses. |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1376 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
|
1377 if( lpfEnumProcesses) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1378 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1379 if(hInstLib2) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1380 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1381 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
|
1382 (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
|
1383 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1384 if(lpfNtQueryInformationProcess){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1385 DWORD dwMaxPids=256; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1386 DWORD dwPidSize; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1387 DWORD *arPids = NULL ; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1388 do { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1389 delete [] arPids; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1390 arPids=new DWORD[dwMaxPids]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1391 } 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
|
1392 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1393 if(dwPidSize/sizeof(DWORD)<dwMaxPids){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1394 rc=true; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1395 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
|
1396 // 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
|
1397 // 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
|
1398 DWORD pid=arPids[dwIndex]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1399 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
|
1400 if (hProcess ) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1401 struct { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1402 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
|
1403 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
|
1404 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
|
1405 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
|
1406 ULONG UniqueProcessId; // receives process identifier |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1407 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
|
1408 } pbi; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1409 memset( &pbi, 0, sizeof(pbi)); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1410 DWORD retLen; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1411 __int64 ftCreation,ftExit,ftKernel,ftUser; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1412 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
|
1413 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
|
1414 // 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
|
1415 // 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
|
1416 wxPInfo p; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1417 p.PID=pid; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1418 p.PPID=pbi.InheritedFromUniqueProcessId; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1419 p.tCreation=ftCreation; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1420 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
|
1421 arPinfo.push_back(p); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1422 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1423 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1424 CloseHandle(hProcess); |
|
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 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1427 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1428 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1429 delete [] arPids; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1430 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1431 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1432 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1433 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1434 break; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1435 case VER_PLATFORM_WIN32_WINDOWS: |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1436 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1437 if( hInstLib1) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1438 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1439 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
|
1440 (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
|
1441 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
|
1442 (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
|
1443 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
|
1444 (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
|
1445 if( lpfProcess32Next && lpfProcess32First && lpfCreateToolhelp32Snapshot) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1446 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1447 // 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
|
1448 // processes. |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1449 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
|
1450 if(INVALID_HANDLE_VALUE != hSnapShot) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1451 // Get the first process' information. |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1452 PROCESSENTRY32 procentry; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1453 procentry.dwSize = sizeof(PROCESSENTRY32) ; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1454 if(lpfProcess32First( hSnapShot, &procentry )){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1455 rc=true; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1456 do { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1457 wxPInfo p; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1458 p.PID=procentry.th32ProcessID; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1459 p.PPID=procentry.th32ParentProcessID; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1460 arPinfo.push_back(p); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1461 } while(lpfProcess32Next( hSnapShot, &procentry )); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1462 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1463 CloseHandle(hSnapShot); |
|
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 default: |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1469 break; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1470 } |
|
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 SetParents(arPinfo); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1473 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1474 if(!rc){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1475 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
|
1476 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1477 return rc; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1478 } |
|
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 #else // UNIX |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1481 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1482 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
|
1483 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1484 arPinfo.clear(); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1485 int i; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1486 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
|
1487 if(f){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1488 char buf[100]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1489 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
|
1490 TCHAR discard[100]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1491 wxPInfo p; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1492 // Output is in the form |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1493 // 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
|
1494 //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
|
1495 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
|
1496 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
|
1497 if(rc){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1498 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
|
1499 arPinfo.push_back(p); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1500 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1501 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1502 pclose(f); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1503 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
|
1504 int pid=arPinfo[i].PPID; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1505 arPinfo[i].pParent=0; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1506 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
|
1507 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
|
1508 arPinfo[i].pParent=&arPinfo[j]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1509 break; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1510 } |
|
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 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1514 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
|
1515 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1516 return true; //FIXME |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1517 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1518 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1519 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1520 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1521 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
|
1522 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1523 int i; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1524 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
|
1525 wxPInfo &p=arPinfo[i]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1526 p.pParent=0; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1527 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
|
1528 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
|
1529 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1530 && arPinfo[j].tCreation<p.tCreation |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1531 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1532 ) |
|
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 arPinfo[i].pParent=&arPinfo[j]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1535 break; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1536 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1537 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1538 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1539 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1540 // Check for circularity |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1541 bool bCircularity=false; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1542 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
|
1543 wxPInfo *p=&arPinfo[i]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1544 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
|
1545 p=p->pParent; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1546 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1547 // 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
|
1548 if(p){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1549 // 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
|
1550 arPinfo[i].pParent=0; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1551 bCircularity=true; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1552 } |
|
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 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1555 if(bCircularity){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1556 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
|
1557 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
|
1558 const wxPInfo &p=arPinfo[k]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1559 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
|
1560 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1561 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1562 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1563 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1564 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
|
1565 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1566 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
|
1567 if(p->PID==pid){ |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1568 return true; |
|
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 return false; |
|
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 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1574 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
|
1575 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1576 wxString str; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1577 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
|
1578 #ifdef _DEBUG |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1579 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1580 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
|
1581 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
|
1582 (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
|
1583 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
|
1584 (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
|
1585 if( lpfEnumProcessModules && lpfGetModuleFileNameEx ) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1586 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
|
1587 if(hProcess) { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1588 HMODULE hMod; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1589 DWORD dwSize; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1590 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
|
1591 // Get Full pathname: |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1592 TCHAR buf[1+MAX_PATH]; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1593 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
|
1594 str+=_TCHAR(' '); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1595 str+=buf; |
|
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 CloseHandle(hProcess); |
|
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 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1600 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1601 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1602 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1603 return str; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1604 } |
|
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 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1607 long wxProcessKiller::GetPlatform() |
|
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 OSVERSIONINFO osver; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1610 osver.dwOSVersionInfoSize = sizeof( osver ) ; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1611 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
|
1612 } |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1613 #endif |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1614 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1615 const wxString wxProcessKiller::ErrorString() const |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1616 { |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1617 #ifdef _WIN32 |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1618 TCHAR *pszMsg; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1619 FormatMessage( |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1620 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
|
1621 NULL, |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1622 m_nErr, |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1623 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
|
1624 (LPTSTR)&pszMsg, |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1625 0, |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1626 NULL |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1627 ); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1628 return pszMsg; |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1629 #else |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1630 return strerror(errno); |
|
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
163
diff
changeset
|
1631 #endif |
|
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 |
