annotate host/tools/Utils/common/Collections.cpp @ 540:9034ec3868e5

* configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin builds to eliminate fd_set compiler warning * configtool/standalone/wxwin/filename.cpp, configtool/standalone/wxwin/configtooldoc.cpp, configtool/standalone/wxwin/appsettings.cpp: Do not #undef macros matching ecFileName member functions referenced in these files for Cygwin builds. * Utils/common/Collections.cpp: #include <winsock2.h> early for Cygwin builds to eliminate fd_set compiler warning * Utils/common/eCosSocket.cpp: Add newline at end of file to eliminate compiler warning
author jld
date Sat, 25 Jan 2003 23:07:53 +0000
parents 6736c52df507
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1 //####COPYRIGHTBEGIN####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
2 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
3 // ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
4 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
5 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
6 // This program is part of the eCos host tools.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
7 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
8 // This program is free software; you can redistribute it and/or modify it
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
9 // under the terms of the GNU General Public License as published by the Free
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
10 // Software Foundation; either version 2 of the License, or (at your option)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
11 // any later version.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
12 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
13 // This program is distributed in the hope that it will be useful, but WITHOUT
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
14 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
15 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
16 // more details.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
17 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
18 // You should have received a copy of the GNU General Public License along with
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
19 // this program; if not, write to the Free Software Foundation, Inc.,
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
20 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
21 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
22 // ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
23 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
24 //####COPYRIGHTEND####
540
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
25
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
26 // include winsock2.h early to eliminate fd_set warning
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
27 #ifdef __CYGWIN__
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
28 #include <winsock2.h>
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
29 #endif
9034ec3868e5 * configtool/standalone/wxwin/ecpch.h: #include <winsock2.h> early for Cygwin
jld
parents: 82
diff changeset
30
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
31 #include "Collections.h"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
32
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
33 void String::Format (LPCTSTR const pszFormat,...)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
34 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
35 va_list args;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
36 va_start(args, pszFormat);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
37 vFormat(pszFormat,args);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
38 va_end(args);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
39 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
40
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
41 String String::SFormat (LPCTSTR const pszFormat,...)
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
42 {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
43 String s;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
44 va_list args;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
45 va_start(args, pszFormat);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
46 s.vFormat(pszFormat,args);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
47 va_end(args);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
48 return s;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
49 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
50
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
51 void String::vFormat(LPCTSTR pszFormat, va_list marker)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
52 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
53 for(int nLength=100;nLength;) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
54 TCHAR *buf=new TCHAR[1+nLength];
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
55 int n=_vsntprintf(buf, nLength, pszFormat, marker );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
56 if(-1==n){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
57 nLength*=2; // NT behavior
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
58 } else if (n<nLength){
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
59 string::operator=(buf);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
60 nLength=0; // trigger exit from loop
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
61 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
62 nLength=n+1; // UNIX behavior generally, or NT behavior when buffer size exactly matches required length
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
63 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
64 delete [] buf;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
65 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
66 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
67
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
68 TCHAR * String::GetBuffer(unsigned int nLength)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
69 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
70 assert(NULL==m_pszBuf);
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
71 nLength=MAX(nLength,size()); // to accommodate _tcscpy below
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
72 m_pszBuf=new TCHAR[1+nLength];
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
73 m_nBufferLength=nLength;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
74 _tcscpy(m_pszBuf,c_str());
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
75 return m_pszBuf;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
76 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
77
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
78 void String::ReleaseBuffer()
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
79 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
80 assert(m_pszBuf);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
81 m_pszBuf[m_nBufferLength]=_TCHAR('\0'); // just in case the terminating null has been forgotten
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
82 string::operator=(m_pszBuf);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
83 delete [] m_pszBuf;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
84 m_pszBuf=0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
85 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
86
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
87 String String::CStrToUnicodeStr(const char *psz)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
88 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
89 String str;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
90 #ifdef _UNICODE
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
91 int nLength=1+strlen(psz);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
92 MultiByteToWideChar(CP_ACP, 0, psz, -1, str.GetBuffer(nLength), nLength);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
93 str.ReleaseBuffer();
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
94 #else
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
95 str=psz;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
96 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
97 return str;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
98 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
99
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
100 int String::Chop(StringArray &ar,TCHAR cSep,bool bObserveStrings/*=TRUE*/) const
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
101 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
102 assert('\0'!=cSep);
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
103 #define IsSep(c) (cSep==_TCHAR(' ')?_istspace(c):c==cSep)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
104 LPCTSTR c=c_str();
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
105 ar.clear();
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
106 while(*c){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
107 // Spaces are slightly different from other separators - we treat multiple instances as
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
108 // just one (a la sscanf)
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
109 if(_istspace(cSep)){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
110 while(IsSep(*c))c++;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
111 } else if (ar.size()>0) {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
112 c++;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
113 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
114 if(*c){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
115 String strTok;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
116 if(bObserveStrings){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
117 bool bInString=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
118 do{
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
119 if(*c==_TCHAR('\\') && c[1]){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
120 strTok+=c[1];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
121 c++;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
122 } else if(*c==_TCHAR('"')){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
123 bInString ^= 1;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
124 } else if (!bInString && IsSep(*c)) {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
125 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
126 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
127 strTok+=*c;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
128 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
129 } while (*++c);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
130 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
131 do {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
132 if(IsSep(*c)) {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
133 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
134 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
135 strTok+=*c;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
136 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
137 } while (*++c);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
138 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
139 ar.push_back(strTok);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
140 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
141 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
142 return ar.size();
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
143 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
144
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
145 char * String::GetCString() const
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
146 {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
147 char *psz=new char[1+size()];
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
148 #ifdef _UNICODE
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
149 WideCharToMultiByte(CP_ACP, 0, c_str(), -1, psz, 1+size(), NULL, NULL);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
150 #else
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
151 strcpy(psz,c_str());
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
152 #endif
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
153 return psz;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
154 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
155
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
156 void String::Replace(LPCTSTR psz1, LPCTSTR psz2, bool bObserveEscapes)
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
157 {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
158 for(unsigned int nOffset=0;nOffset<size();){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
159 LPCTSTR psz=c_str()+nOffset;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
160 const TCHAR *pc=_tcsstr(psz,psz1);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
161 if(pc){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
162 if(bObserveEscapes && pc>psz && _TCHAR('\\')==pc[-1]){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
163 // Substitution protected by escape
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
164 nOffset=(pc-psz)+_tcslen(psz1);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
165 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
166 String strNew(psz,pc-psz); // before the substitution
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
167 strNew+=psz2; // substitution text
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
168 pc+=_tcslen(psz1); // past the substituted text
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
169 strNew+=pc; // after the substitution
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
170 string::operator=(strNew);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
171 nOffset=(pc-psz)+_tcslen(psz2);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
172 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
173 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
174 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
175 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
176 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
177 }