annotate host/tools/Utils/common/Properties.cpp @ 208:e0c0827131d1 ecos

Merge from eCos master repository on 2002-05-20-20:11:54-BST
author jlarmour
date Mon, 20 May 2002 22:19:26 +0000
parents 6736c52df507
children 9589be2cc5c9
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####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
25 // Properties.cpp: implementation of the CProperties class.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
26 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
27 //////////////////////////////////////////////////////////////////////
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
28 #include "Properties.h"
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
29 #include "eCosTrace.h"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
30 //////////////////////////////////////////////////////////////////////
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
31 // Construction/Destruction
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
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
34 CProperties::CProperties()
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
35 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
36 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
37
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
38 CProperties::~CProperties()
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 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
41
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
42 #ifdef _WIN32
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
43 bool CProperties::LoadFromRegistry(HKEY hTopKey,LPCTSTR szRegKey)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
44 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
45 HKEY hKey;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
46 LONG l=RegOpenKeyEx (hTopKey, szRegKey, 0L, KEY_QUERY_VALUE, &hKey);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
47 bool rc=(ERROR_SUCCESS==l);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
48 if(rc){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
49 TCHAR szName[256];
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
50 DWORD dwSizeName=sizeof szName;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
51 DWORD dwMaxDatalen;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
52 DWORD dwType;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
53 if(ERROR_SUCCESS==RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&dwMaxDatalen,NULL,NULL)){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
54 char *Data=new char[dwMaxDatalen];
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
55 DWORD dwDatalen=dwMaxDatalen;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
56 for(DWORD dwIndex=0;ERROR_SUCCESS==RegEnumValue(hKey, dwIndex, szName, &dwSizeName, NULL, &dwType, (LPBYTE)Data, &dwDatalen);dwIndex++){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
57
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
58 CProperties::CProperty *p=Lookup(szName);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
59 if(p){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
60 switch(p->Type){
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
61 case CProperty::Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
62 if(REG_DWORD==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
63 p->SetValue(*(int *)Data);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
64 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
65 TRACE(_T("Type mismatch - %s: expected REG_DWORD, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
66 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
67 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
68 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
69 case CProperty::Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
70 if(REG_DWORD==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
71 p->SetValue((bool)0!=*(int *)Data);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
72 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
73 TRACE(_T("Type mismatch - %s: expected REG_DWORD, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
74 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
75 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
76 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
77 case CProperty::Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
78 if(REG_DWORD==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
79 p->SetValue(*(char *)Data);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
80 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
81 TRACE(_T("Type mismatch - %s: expected REG_DWORD, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
82 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
83 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
84 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
85 case CProperty::Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
86 if(REG_DWORD==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
87 p->SetValue(*(short *)Data);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
88 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
89 TRACE(_T("Type mismatch - %s: expected REG_DWORD, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
90 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
91 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
92 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
93 case CProperty::Float:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
94 case CProperty::Double:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
95 case CProperty::szString:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
96 if(REG_SZ==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
97 rc&=p->SetValue((LPCTSTR)Data);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
98 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
99 TRACE(_T("Type mismatch - %s: expected REG_SZ, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
100 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
101 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
102 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
103 case CProperty::Void:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
104 if(REG_BINARY==dwType){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
105 memcpy(p->pData,Data,min(dwDatalen,p->nLength));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
106 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
107 TRACE(_T("Type mismatch - %s: expected REG_BINARY, got %d\n"),(LPCTSTR)p->strName,dwType);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
108 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
109 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
110 break;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
111 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
112 } else {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
113 TRACE(_T("CProperties::LoadFromRegistry - unrecognized value %s in key %s\n"),szName,szRegKey);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
114 rc=false;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
115 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
116 dwSizeName=sizeof szName;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
117 dwDatalen=dwMaxDatalen;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
118 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
119 delete [] Data;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
120 dwSizeName=sizeof szName;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
121 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
122 RegCloseKey(hKey);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
123 } else {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
124 TRACE(_T("Failed to open %s\n"),szRegKey);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
125 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
126
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
127 return rc;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
128 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
129
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
130 bool CProperties::SaveToRegistry(HKEY hTopKey,LPCTSTR szRegKey) const
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
131 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
132 HKEY hKey;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
133 CreateKey(szRegKey);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
134 bool rc=(ERROR_SUCCESS==RegOpenKeyEx (hTopKey, szRegKey, 0L, KEY_SET_VALUE, &hKey));
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
135 if(rc){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
136 for(int i=ar.size()-1;i>=0;--i){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
137 // Initializations are simply to avoid compiler warnings.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
138 DWORD dwDatalen=0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
139 DWORD dwType=REG_DWORD;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
140 BYTE *Data=0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
141 // strValue and dw *must* be in scope for RegSetValueEx below.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
142 DWORD dw;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
143 String strValue;
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
144 const CProperty &p=ar[i];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
145 switch(p.Type){
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
146 case CProperties::CProperty::Integer:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
147 case CProperties::CProperty::Bool:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
148 case CProperties::CProperty::Char:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
149 case CProperties::CProperty::Short:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
150 dwType=REG_DWORD;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
151 dwDatalen=sizeof(DWORD);
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
152 dw=p.GetValue();
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
153 Data=(BYTE *)&dw;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
154 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
155 case CProperties::CProperty::Float:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
156 case CProperties::CProperty::Double:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
157 case CProperties::CProperty::szString:
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
158 strValue=p.GetStringValue();
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
159 Data=(BYTE *)(LPCTSTR)strValue;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
160 dwType=REG_SZ;
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
161 dwDatalen=(1+strValue.size())*sizeof(_TCHAR);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
162 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
163 case CProperties::CProperty::Void:
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
164 Data=(BYTE *)p.pData;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
165 dwType=REG_BINARY;
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
166 dwDatalen=p.nLength;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
167 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
168 default:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
169 assert(false);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
170 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
171 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
172 rc&=(ERROR_SUCCESS==RegSetValueEx(hKey,p.strName,0,dwType,Data,dwDatalen));
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
173 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
174 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
175 RegCloseKey(hKey);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
176 return rc;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
177 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
178
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
179 // Create all keys down to the one specified
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
180 bool CProperties::CreateKey(LPCTSTR pszKey,HKEY hKey/*=HKEY_CURRENT_USER*/)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
181 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
182 bool rc=true;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
183 LPCTSTR pcStart=pszKey;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
184 LPCTSTR pcEnd;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
185 do {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
186 HKEY hKey2;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
187 pcEnd=_tcschr(pcStart,_TCHAR('\\'));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
188 if(NULL==pcEnd){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
189 pcEnd=pcStart+_tcslen(pcStart);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
190 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
191 String strKey(pcStart,pcEnd-pcStart);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
192 if(ERROR_SUCCESS!=RegCreateKeyEx(hKey, // handle to an open key
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
193 strKey, // address of subkey name
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
194 0, // reserved
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
195 0, // address of class string
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
196 REG_OPTION_NON_VOLATILE, // special options flag
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
197 KEY_ALL_ACCESS, // desired security access
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
198 NULL,
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
199 // address of key security structure
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
200 &hKey2, // address of buffer for opened handle
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
201 NULL// address of disposition value buffer);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
202 )){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
203 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
204 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
205 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
206 RegCloseKey(hKey);
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
207 hKey=hKey2;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
208 pcStart=pcEnd+1;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
209 } while (_TCHAR('\0')!=*pcEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
210 RegCloseKey(hKey);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
211 return rc;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
212 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
213
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
214 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
215
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
216 bool CProperties::LoadFromCommandString(LPCTSTR psz)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
217 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
218 bool rc=true;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
219 const TCHAR *cNext;
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
220 for(LPCTSTR c=_tcschr(psz,_TCHAR('-'));c;c=_tcschr(cNext,_TCHAR('-'))){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
221 c++;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
222 const TCHAR *pEq=_tcschr(c,_TCHAR('='));
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
223 if(NULL==pEq){
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
224 TRACE(_T("Failed to find '=' after %s\n"),c);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
225 rc=false;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
226 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
227 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
228 String strName(c,pEq-c);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
229 CProperties::CProperty *p=Lookup(strName);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
230 c=pEq+1;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
231 String str;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
232 if(_TCHAR('"')==*c){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
233 // Value is a quoted string
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
234 for(cNext=c+1;_TCHAR('"')!=*cNext;cNext++){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
235 if(_TCHAR('\\')==*cNext){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
236 cNext++;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
237 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
238 str+=*cNext;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
239 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
240 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
241 // Value is simply terminated by whitespace
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
242 for(cNext=c;_TCHAR('\0')!=*cNext && !_istspace(*cNext);cNext++);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
243 str=String(c,cNext-c);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
244 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
245 if(p){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
246 rc&=p->SetValue(str);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
247 } else {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
248 TRACE(_T("Properties: unrecognized attribute %s in command string\n"),(LPCTSTR)strName);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
249 rc=false;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
250 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
251 c=cNext;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
252 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
253 return rc;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
254 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
255
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
256 CProperties::CProperty * CProperties::Lookup(LPCTSTR pszName)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
257 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
258 for(int i=ar.size()-1;i>=0;--i){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
259 CProperties::CProperty &p=ar[i];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
260 if(0==_tcsicmp(p.strName,pszName)){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
261 return &p;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
262 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
263 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
264 return NULL;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
265 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
266
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
267 String CProperties::MakeCommandString() const
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
268 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
269 String strResult;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
270 bool bFirst=true;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
271 for(int i=ar.size()-1;i>=0;--i){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
272 String str;
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
273 const CProperty &p=ar[i];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
274 switch(p.Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
275 case CProperties::CProperty::Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
276 case CProperties::CProperty::Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
277 case CProperties::CProperty::Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
278 case CProperties::CProperty::Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
279 str.Format(_T("-%s=%u"),(LPCTSTR)p.strName,p.GetValue());
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
280 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
281 case CProperties::CProperty::szString:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
282 {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
283 // Quote the string, escaping existing quotes as necessary
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
284 str.Format(_T("-%s=\""),(LPCTSTR)p.strName);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
285 for(LPCTSTR c=p.GetStringValue();*c;c++){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
286 if(_TCHAR('"')==*c){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
287 str+=_TCHAR('\\');
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
288 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
289 str+=*c;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
290 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
291 str+=_TCHAR('"');
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
292 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
293 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
294 case CProperties::CProperty::Float:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
295 case CProperties::CProperty::Double:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
296 case CProperties::CProperty::Void:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
297 str.Format(_T("-%s=%s"),(LPCTSTR)p.GetStringValue());
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
298 break;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
299 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
300 if(!bFirst){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
301 strResult+=_TCHAR(' ');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
302 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
303 bFirst=false;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
304 strResult+=str;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
305 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
306 return strResult;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
307 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
308
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
309 bool CProperties::CreatePathToFile(LPCTSTR pszDir)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
310 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
311 // Create intermediate directories
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
312 #ifdef _WIN32
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
313 const TCHAR cSep='\\';
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
314 #else // UNIX
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
315 const TCHAR cSep='/';
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
316 #endif
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
317 for(LPCTSTR c=_tcschr(pszDir,cSep);c;c=_tcschr(c+1,cSep)){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
318 #ifdef _WIN32
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
319 if(c==pszDir+2 && _istalpha(pszDir[0]) && _TCHAR(':')==pszDir[1]){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
320 continue; // don't attempt to create "C:"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
321 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
322 #endif
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
323 String strDir(pszDir,c-pszDir);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
324 struct _stat buf;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
325 if(!(0==_tstat(strDir,&buf) && (S_IFDIR&buf.st_mode))){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
326 // Need to create directory
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
327 bool b=(0==_tmkdir(strDir));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
328 TRACE(_T("Create directory %s rc=%d\n"),(LPCTSTR)strDir,b);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
329 if(!b){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
330 return false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
331 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
332 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
333 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
334 return true;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
335 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
336
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
337 bool CProperties::SaveToFile(LPCTSTR pszFileName) const
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
338 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
339 CreatePathToFile(pszFileName);
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
340 FILE *f=_tfopen(pszFileName,_T("w") MODE_TEXT);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
341 if(f){
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
342 for(int i=ar.size()-1;i>=0;--i){
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
343 const CProperty &p=ar[i];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
344 String str(p.strName);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
345 str+=_TCHAR('=');
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
346 switch(p.Type){
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
347 case CProperties::CProperty::Integer:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
348 case CProperties::CProperty::Bool:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
349 case CProperties::CProperty::Char:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
350 case CProperties::CProperty::Short:
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
351 str+=String::SFormat(_T("%u"),p.GetValue());
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
352 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
353 case CProperties::CProperty::Float:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
354 case CProperties::CProperty::Double:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
355 case CProperties::CProperty::szString:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
356 case CProperties::CProperty::Void:
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
357 str+=p.GetStringValue();
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
358 break;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
359 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
360 str+=_TCHAR('\n');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
361 _fputts(str,f);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
362 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
363 fclose(f);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
364 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
365 return (0!=f);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
366 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
367
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
368 bool CProperties::LoadFromFile(LPCTSTR pszFileName)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
369 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
370 FILE *f=_tfopen(pszFileName,_T("r") MODE_TEXT);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
371 bool rc=(0!=f);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
372 if(rc){
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
373 TCHAR buf[4096];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
374 int nLine=0;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
375 String str;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
376 while(_fgetts(buf,sizeof(buf)-1,f)){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
377
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
378 nLine++;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
379 int nLen=_tcslen(buf);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
380 if(nLen>0){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
381 // Remove trailing '\n'
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
382 if(_TCHAR('\n')==buf[nLen-1]){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
383 buf[--nLen]=_TCHAR('\0');
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
384 }
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 82
diff changeset
385 // Remove trailing '\r'
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 82
diff changeset
386 if(_TCHAR('\r')==buf[nLen-1]){
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 82
diff changeset
387 buf[--nLen]=_TCHAR('\0');
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 82
diff changeset
388 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
389
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
390 // Check for continuation lines
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
391 if(_TCHAR('\\')==buf[nLen-1]){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
392 buf[--nLen]=_TCHAR('\0');
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
393 str+=buf;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
394 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
395 str+=buf;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
396 LPCTSTR c=(LPCTSTR)str;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
397 const TCHAR *pEq=_tcschr(c,_TCHAR('='));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
398 if(pEq){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
399 const String strName(c,pEq-c);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
400 CProperties::CProperty *p=Lookup(strName);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
401 if(p){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
402 pEq++;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
403 rc&=p->SetValue(pEq);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
404 } else {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
405 ERROR(_T("Unknown attribute %s found in %s line %d\n"),(LPCTSTR)strName,pszFileName,nLine);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
406 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
407 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
408 }
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
409 str=_T("");
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
410 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
411 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
412 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
413 fclose(f);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
414 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
415 return rc;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
416 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
417
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
418 CProperties::CProperty::CProperty(LPCTSTR pszName,Typetype type,void *_pData):
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
419 strName(pszName),
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
420 Type(type),
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
421 pData(_pData)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
422 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
423 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
424
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
425 CProperties::CProperty::~CProperty()
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
426 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
427 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
428
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
429 void CProperties::Add(LPCTSTR pszName,int &n)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
430 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
431 CProperty p(pszName,CProperty::Integer,&n);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
432 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
433 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
434
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
435 void CProperties::Add(LPCTSTR pszName,unsigned int &n)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
436 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
437 CProperty p(pszName,CProperty::Integer,&n);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
438 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
439 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
440
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
441 void CProperties::Add(LPCTSTR pszName,bool &b)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
442 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
443 CProperty p(pszName,CProperty::Bool,&b);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
444 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
445 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
446
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
447 void CProperties::Add(LPCTSTR pszName,char &c)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
448 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
449 CProperty p(pszName,CProperty::Char,&c);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
450 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
451 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
452
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
453 void CProperties::Add(LPCTSTR pszName,unsigned char &c)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
454 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
455 CProperty p(pszName,CProperty::Char,&c);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
456 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
457 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
458
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
459 void CProperties::Add(LPCTSTR pszName,short &s)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
460 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
461 CProperty p(pszName,CProperty::Short,&s);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
462 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
463 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
464
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
465 void CProperties::Add(LPCTSTR pszName,unsigned short &s)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
466 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
467 CProperty p(pszName,CProperty::Short,&s);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
468 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
469 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
470
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
471 void CProperties::Add(LPCTSTR pszName,float &f)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
472 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
473 CProperty p(pszName,CProperty::Float,&f);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
474 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
475 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
476
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
477 void CProperties::Add(LPCTSTR pszName,double &f)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
478 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
479 CProperty p(pszName,CProperty::Double,&f);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
480 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
481 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
482
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
483 void CProperties::Add(LPCTSTR pszName,void *pv,unsigned int _nLength)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
484 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
485 CProperty p(pszName,CProperty::Void,pv);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
486 p.nLength=_nLength;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
487 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
488 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
489
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
490 void CProperties::Add(LPCTSTR pszName,String &s)
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
491 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
492 CProperty p(pszName,CProperty::szString,(void *)&s);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
493 ar.push_back(p);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
494 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
495
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
496 unsigned long CProperties::CProperty::GetValue() const
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
497 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
498 unsigned long dw;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
499 switch(Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
500 case Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
501 dw=*(int *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
502 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
503 case Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
504 dw=*(bool *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
505 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
506 case Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
507 dw=*(char *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
508 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
509 case Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
510 dw=*(short *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
511 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
512 default:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
513 dw=0;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
514 assert(false);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
515 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
516 return dw;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
517 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
518
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
519 const String CProperties::CProperty::GetStringValue() const
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
520 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
521 String str;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
522 switch(Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
523 case szString:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
524 str=*(String *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
525 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
526 case CProperties::CProperty::Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
527 case CProperties::CProperty::Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
528 case CProperties::CProperty::Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
529 case CProperties::CProperty::Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
530 str.Format(_T("%u"),GetValue());
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
531 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
532 case CProperties::CProperty::Float:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
533 str.Format(_T("%e"),*(float *)(pData));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
534 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
535 case CProperties::CProperty::Double:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
536 str.Format(_T("%e"),*(double *)(pData));
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
537 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
538 case CProperties::CProperty::Void:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
539 {
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
540 unsigned char *c=(unsigned char *)pData;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
541 for(unsigned int i=0;i<nLength;i++){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
542 TCHAR buf[3];
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
543 _tprintf(buf,_T("%02x"),c[i]);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
544 str+=buf;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
545 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
546 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
547 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
548 default:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
549 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
550 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
551 return str;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
552 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
553
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
554 bool CProperties::CProperty::SetValue(int n)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
555 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
556 bool rc=true;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
557 switch(Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
558 case Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
559 *(int *)(pData)=n;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
560 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
561 case Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
562 *(bool *)(pData)=(0!=n);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
563 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
564 case Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
565 *(char *)(pData)=(char)n; //FIXME: range checks
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
566 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
567 case Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
568 *(short *)(pData)=(short)n;//FIXME: range checks
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
569 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
570 default:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
571 TRACE(_T("Failed to set '%s' to integer value '%d'\n"),(LPCTSTR)strName,n);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
572 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
573 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
574 return rc;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
575 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
576
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
577 bool CProperties::CProperty::SetValue(double n)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
578 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
579 bool rc=true;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
580 switch(Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
581 case Double:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
582 *(float *)(pData)=(float)n;//FIXME: range checks?
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
583 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
584 case Float:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
585 *(double *)(pData)=n;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
586 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
587 default:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
588 TRACE(_T("Failed to set '%s' to double value '%f'\n"),(LPCTSTR)strName,n);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
589 rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
590 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
591 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
592
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
593 return rc;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
594 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
595
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
596 bool CProperties::CProperty::SetValue(LPCTSTR psz)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
597 {
82
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
598 bool rc=false;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
599 TCHAR *pEnd;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
600 double d=0.0;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
601 long l=0;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
602 switch(Type){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
603 case szString:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
604 *(String *)pData=psz;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
605 rc=true;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
606 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
607 case Float:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
608 d=_tcstod(psz,&pEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
609 rc=(_TCHAR('\0')==*pEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
610 if(rc){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
611 SetValue((float)d);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
612 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
613 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
614 case Double:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
615 d=_tcstod(psz,&pEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
616 rc=(_TCHAR('\0')==*pEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
617 if(rc){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
618 SetValue(d);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
619 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
620 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
621 case Integer:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
622 case Bool:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
623 case Char:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
624 case Short:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
625 l=_tcstol(psz,&pEnd,10);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
626 rc=(_TCHAR('\0')==*pEnd);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
627 if(rc){
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
628 SetValue((int)l);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
629 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
630 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
631 default:
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
632 TRACE(_T("Failed to set '%s' to string value '%s'\n"),(LPCTSTR)strName,psz);
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
633 break;
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
634 }
6736c52df507 Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents: 76
diff changeset
635 return rc;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
636 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
637