Changeset 3581 in Sophya for trunk/SophyaLib/SysTools
- Timestamp:
- Feb 22, 2009, 11:55:30 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/SysTools/commander.cc
r3577 r3581 21 21 // Pour ecrire une valeur double sous forme de string 22 22 // sans perte de precision, et si possible de maniere 23 // lisible (%g, sinon %.17e) 24 static char cval_strbuff_[64]; 23 // lisible (%g, sinon format adapte jusqu'a %.17e) 24 static char cval_strbuff_[80]; 25 ////1er essai binaire: char * cval_dble2str(double v) 26 ////1er essai binaire: { 27 ////1er essai binaire: char* str1 = cval_strbuff_; 28 ////1er essai binaire: sprintf(str1,"%g",v); 29 ////1er essai binaire: char* str2 = cval_strbuff_+32; 30 ////1er essai binaire: sprintf(str2,"%.17e",v); 31 ////1er essai binaire: double x1 = atof(str1); 32 ////1er essai binaire: double x2 = atof(str2); 33 ////1er essai binaire: double fx = fabs(v); 34 ////1er essai binaire: if (fx>0. && fabs(x2-x1)/fx>1e-12) return str2; 35 ////1er essai binaire: else return str1; 36 ////1er essai binaire: } 25 37 char * cval_dble2str(double v) 26 38 { 27 char* str1 = cval_strbuff_; 28 sprintf(str1,"%g",v); 29 char* str2 = cval_strbuff_+32; 30 sprintf(str2,"%.17e",v); 31 double x1 = atof(str1); 32 double x2 = atof(str2); 33 double fx = fabs(v); 34 if (fx>0. && fabs(x2-x1)/fx>1e-12) return str2; 35 else return str1; 39 char* strgood = cval_strbuff_; sprintf(strgood,"%g",v); 40 char* strfull = cval_strbuff_+32; sprintf(strfull,"%.17e",v); 41 char* strform = cval_strbuff_+64; 42 double x1 = atof(strfull), fx = fabs(x1); 43 if(fx>0.) { 44 for(int i=7;i<=17;i+=2) { // increment de 2 pour aller + vite 45 double x2 = atof(strgood); 46 if(fabs(x2-x1)/fx<1.e-16) break; 47 sprintf(strform,"%%.%de",i); 48 sprintf(strgood,strform,v); 49 } 50 } 51 return strgood; 36 52 } 37 53 //-------------------------------------------------- … … 121 137 if ( (args[1] == "(") && (args[args.size()-1] == ")") ) { 122 138 // foreach varname ( w1 w2 w3 ... ) 123 for( int kk=2; kk<args.size()-1; kk++) strlist.push_back(args[kk]);139 for(unsigned int kk=2; kk<args.size()-1; kk++) strlist.push_back(args[kk]); 124 140 } 125 141 else { … … 170 186 CommanderBloc::~CommanderBloc() 171 187 { 172 for( int k=0; k<blocs.size(); k++) delete blocs[k];188 for(unsigned int k=0; k<blocs.size(); k++) delete blocs[k]; 173 189 } 174 190 … … 195 211 if (typ == BT_ForeachLineInFile) { // foreach line in file loop 196 212 ifstream is(filename.c_str()); 197 char buff[256];198 213 string line; 199 214 while (!is.eof()) { 200 /* Reza, Juin 2005 : Remplace par getline(istream, string) - plus sur201 is.getline(buff, 256); line += buff; */202 215 rcc = 0; 203 216 line = ""; … … 211 224 } 212 225 else if (typ == BT_ForeachList) { // foreach string loop 213 for( k=0; k<strlist.size(); k++) {226 for(unsigned int k=0; k<strlist.size(); k++) { 214 227 rcc = ExecuteOnce(strlist[k]); 215 228 if (rcc == CMD_BREAKEXE_RC) return rcc; … … 250 263 int CommanderBloc::ExecuteOnce(string& lvv) 251 264 { 252 int kj=0;265 unsigned int kj=0; 253 266 int kk=0; 254 267 int rcc = 0; … … 341 354 int CommanderScript::Execute(vector<string>& args) 342 355 { 343 int rcc ;356 int rcc=-2; 344 357 if (!CheckScript()) return(-1); 345 358 cout << " CommanderScript::Execute() - Executing script " << Name() << endl; 346 for( int k=0; k<lines.size(); k++) {359 for(unsigned int k=0; k<lines.size(); k++) { 347 360 rcc = _commander->Interpret(lines[k]); 348 361 if ( (rcc == CMD_BREAKEXE_RC) || (rcc == CMD_RETURN_RC) ) break; … … 1067 1080 if (tokens.size() > 2) { 1068 1081 string sex = tokens[1]; 1069 for( int js=2; js<tokens.size(); js++) sex += tokens[js];1082 for(unsigned int js=2; js<tokens.size(); js++) sex += tokens[js]; 1070 1083 CExpressionEvaluator cex(sex); 1071 1084 res = cex.Value(); … … 1331 1344 } 1332 1345 vv = ArgsStack.top()[0]; 1333 for( int ssk=1; ssk<ArgsStack.top().size(); ssk++) vv += ArgsStack.top()[ssk];1346 for(unsigned int ssk=1; ssk<ArgsStack.top().size(); ssk++) vv += ArgsStack.top()[ssk]; 1334 1347 return(true); 1335 1348 } … … 1340 1353 vv = ""; return(false); 1341 1354 } 1342 if ( (ka < 0) || (ka >= ArgsStack.top().size()) ) {1355 if ( (ka < 0) || (ka >= (int)ArgsStack.top().size()) ) { 1343 1356 cerr << " Commander::Var2Str/Error: ArgsStack index <0 or >=args.size() ! " 1344 1357 << " ($" << vn << ")" << endl; … … 1437 1450 vv = (*it).second[0]; 1438 1451 if ((*it).second.size() > 1) { 1439 for( int k=1; k<(*it).second.size(); k++) {1452 for(unsigned int k=1; k<(*it).second.size(); k++) { 1440 1453 vv += ' '; vv += (*it).second[k]; 1441 1454 } … … 1450 1463 CmdVarList::iterator it = variables.find(vn); 1451 1464 if (it == variables.end()) return false; 1452 if ((idx < 0) || (idx > ( *it).second.size()-1))1465 if ((idx < 0) || (idx > (int)(*it).second.size()-1)) 1453 1466 return false; 1454 1467 vv = (*it).second[idx]; … … 1511 1524 } 1512 1525 else { 1513 if (idx >= ( *it).second.size())1526 if (idx >= (int)(*it).second.size()) 1514 1527 for(int j=(*it).second.size(); j<=idx; j++) (*it).second.push_back(""); 1515 1528 (*it).second[idx] = val; … … 1805 1818 } 1806 1819 string xx = tokens[1]; 1807 for ( int kk=2; kk<tokens.size(); kk++) xx += (' ' + tokens[kk]);1820 for (unsigned int kk=2; kk<tokens.size(); kk++) xx += (' ' + tokens[kk]); 1808 1821 mAliases[tokens[0]] = xx; 1809 1822 } … … 1832 1845 } 1833 1846 else if (kw == "echo") { 1834 for ( int ii=0; ii<tokens.size(); ii++)1847 for (unsigned int ii=0; ii<tokens.size(); ii++) 1835 1848 cout << tokens[ii] << " " ; 1836 1849 cout << endl; … … 1842 1855 } 1843 1856 ofstream ofs(tokens[0].c_str(), ios::app); 1844 for ( int ii=1; ii<tokens.size(); ii++)1857 for (unsigned int ii=1; ii<tokens.size(); ii++) 1845 1858 ofs << tokens[ii] << " " ; 1846 1859 ofs << endl; … … 1948 1961 if (tokens.size() < 1) { cout << "Commander::Interpret() Usage: shell cmdline" << endl; return(0); } 1949 1962 string cmd; 1950 for ( int ii=0; ii<tokens.size(); ii++)1963 for (unsigned int ii=0; ii<tokens.size(); ii++) 1951 1964 cmd += (tokens[ii] + ' '); 1952 1965 system(cmd.c_str()); … … 1955 1968 if(tokens.size()<1) {cout<<"Commander::Interpret() Usage: cshell cmdline"<<endl; return(0);} 1956 1969 string cmd=""; 1957 for( int ii=0;ii<tokens.size();ii++) cmd+=(tokens[ii]+' ');1970 for(unsigned int ii=0;ii<tokens.size();ii++) cmd+=(tokens[ii]+' '); 1958 1971 CShellExecute(cmd); 1959 1972 } … … 2203 2216 static void check_latex_reflabel(string & prl) 2204 2217 { 2205 for( int k=0; k<prl.length(); k++)2218 for(unsigned int k=0; k<prl.length(); k++) 2206 2219 if (! isalnum(prl[k]) ) prl[k] = 'Z'; 2207 2220 } … … 2211 2224 { 2212 2225 string rs; 2213 for( int k=0; k<mot.length(); k++) {2226 for(unsigned int k=0; k<mot.length(); k++) { 2214 2227 if (mot[k] == '_') rs += "\\_"; 2215 2228 else rs += mot[k];
Note:
See TracChangeset
for help on using the changeset viewer.