Changeset 1276 in Sophya for trunk/SophyaPI/PIext/piacmd.cc
- Timestamp:
- Nov 2, 2000, 11:18:50 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PIext/piacmd.cc
r1269 r1276 169 169 for(int kk=1; kk<args.size(); kk++) strlist.push_back(args[kk]); 170 170 typ = BT_ForeachList; 171 blkok = true; 171 172 } 172 173 else { // This is an integer or float loop … … 189 190 if (fl) { 190 191 typ = BT_ForeachFloat; 192 blkok = true; 191 193 f1 = atof(a1.c_str()); 192 194 f2 = atof(a2.c_str()); … … 196 198 else { 197 199 typ = BT_ForeachInt; 200 blkok = true; 198 201 i1 = atoi(a1.c_str()); 199 202 i2 = atoi(a2.c_str()); … … 285 288 bloccxx = false; 286 289 bloctest = false; 290 mulinecmd = ""; 291 mulinefg = false; 287 292 288 293 cmdhgrp["All"] = 0; … … 490 495 if (s[0] == '#') return(0); // si c'est un commentaire 491 496 497 // Logique de gestion des lignes suite 498 // un \ en derniere position indique la presence d'une ligne suite 499 if (s[l-1] == '\\' ) { // Lignes suite ... 500 mulinefg = true; 501 mulinecmd += s.substr(0,l-1); 502 mImgApp->GetConsole()->SetPrompt("...? "); 503 return(0); 504 } 505 506 if (mulinefg) { // Il y avait des lignes suite 507 s = mulinecmd + s; 508 mulinecmd = ""; 509 mulinefg = false; 510 const char * rprompt = (curblk == NULL) ? "Cmd> " : "foreach? "; 511 mImgApp->GetConsole()->SetPrompt(rprompt); 512 } 492 513 493 514 // Removing leading blanks 494 size_t p,q,q2; 495 l = s.length(); 496 if (l < 1) return(0); 515 size_t p,q; 497 516 498 517 p=s.find_first_not_of(" \t"); … … 534 553 } 535 554 else { 536 char prompt[64];537 sprintf(prompt, "foreach-%d? ", felevel);538 mImgApp->GetConsole()->SetPrompt( prompt);555 // char prompt[64]; 556 // sprintf(prompt, "foreach-%d? ", felevel); 557 mImgApp->GetConsole()->SetPrompt("foreach? "); 539 558 } 540 559 return(0); … … 544 563 545 564 // Nous ne sommes donc pas dans un bloc .... Substitution de variables 546 565 string s2; 566 int rcs ; 547 567 // Execution de code C++ 548 568 … … 553 573 return(99); 554 574 } 555 if (s[1] == '@') {// Sans substitution des variables $556 557 } else { // Avec substitution devariables $558 string s2;559 SubstituteVars(s, s2);575 // Sans substitution des variables $ 576 if (s[1] == '@') return(cxxe->ExecuteCXX(s.substr(2))); 577 else { // AVEC substitution des variables $ 578 rcs = SubstituteVars(s, s2); 579 if (rcs) return(rcs); 560 580 return(cxxe->ExecuteCXX(s2.substr(1))); 561 581 } … … 563 583 564 584 565 string s2;566 SubstituteVars(s, s2);585 rcs = SubstituteVars(s, s2); 586 if (rcs) return(rcs); 567 587 568 588 // >>>> Separating keyword and tokens … … 579 599 p = toks.find_first_not_of(" \t",q+1); // au debut d'un token 580 600 if (p>=l) break; 581 q = toks.find_first_of(" \t",p); // la fin du token; 601 if ( (toks[p] == '\'') || (toks[p] == '"') ) { 602 q = toks.find(toks[p],p+1); 603 if (q>=l) { 604 cerr << "Syntax Error - Unbalenced quotes " << toks[p] << '.' << endl; 605 return(2); 606 } 607 p++; 608 } 609 else { 610 q = toks.find_first_of(" \t",p); // la fin du token; 611 } 582 612 string token = toks.substr(p,q-p); 583 613 tokens.push_back(token); … … 629 659 while (p < l) { 630 660 q = s.find('$',p); 661 if (q > l) break; 662 q2 = s.find('\'',p); 663 if ((q2 < l) && (q2 < q)) { // On saute la chaine delimitee par ' ' 664 q2 = s.find('\'',q2+1); 665 if (q2 >= l) { 666 cerr << " Syntax error - Unbalenced quotes !!! " << endl; 667 return(1); 668 } 669 s2 += s.substr(p, q2-p+1); 670 p = q2+1; continue; 671 } 631 672 // cout << "DBG: " << s2 << " p= " << p << " q= " << q << " L= " << l << endl; 632 if (q > l) break;633 673 if ((q>0) && (s[q-1] == '\\')) { // Escape character \$ 634 674 s2 += (s.substr(p,q-1-p) + '$') ; p = q+1; … … 636 676 } 637 677 if (q >= l-1) { 638 cerr << " Syntax error !!! " << endl;639 return( 0);678 cerr << " Syntax error - line ending with $ !!! " << endl; 679 return(2); 640 680 } 641 681 vn = ""; … … 643 683 q2 = s.find('}',q+1); 644 684 if (q2 >= l) { 645 cerr << " Syntax error !!! " << endl;646 return( 0);685 cerr << " Syntax error - Unbalenced brace {} !!! " << endl; 686 return(3); 647 687 } 648 688 vn = s.substr(q+2,q2-q-2); … … 652 692 q2 = s.find(']',q+1); 653 693 if (q2 >= l) { 654 cerr << " Syntax error !!! " << endl;655 return( 0);694 cerr << " Syntax error - Unbalenced brace [] !!! " << endl; 695 return(4); 656 696 } 657 697 vn = s.substr(q+2,q2-q-2); 658 698 if ( (vn.length() < 1) || (!omg.HasVar(vn)) ) { 659 699 cerr << " Error: Undefined variable " << vn << " ! " << endl; 660 return( 0);700 return(5); 661 701 } 662 702 vn = omg.GetVar(vn); … … 664 704 } 665 705 else { 666 q2 = s.find_first_of(" .:/,]()$ ",q+1);706 q2 = s.find_first_of(" .:/,]()$\"'",q+1); 667 707 if (q2 > l) q2 = l; 668 708 vn = s.substr(q+1, q2-q-1); … … 670 710 if ( (vn.length() < 1) || (!omg.HasVar(vn)) ) { 671 711 cerr << " Error: Undefined variable " << vn << " ! " << endl; 672 return( 0);712 return(5); 673 713 } 674 714 s2 += (s.substr(p, q-p) + omg.GetVar(vn)); … … 705 745 return(0); 706 746 } 707 string xx = tokens[1];708 for (int kk=2; kk<tokens.size(); kk++) xx += (' ' + tokens[kk] );709 omg.SetVar(tokens[0], xx);747 // string xx = tokens[1]; 748 // for (int kk=2; kk<tokens.size(); kk++) xx += (' ' + tokens[kk] ); 749 omg.SetVar(tokens[0], tokens[1]); 710 750 } 711 751 … … 756 796 } 757 797 else if (kw == "echo") { 758 for (int kk=0; kk<tokens.size(); kk++) cout << tokens[kk] << " " ; 798 for (int ii=0; ii<tokens.size(); ii++) 799 cout << tokens[ii] << " " ; 759 800 cout << endl; 760 } 761 801 } 762 802 else if (kw == "readstdin") { 763 803 if (tokens.size() < 1) { cout << "PIACmd::Interpret() Usage: readstdin varname" << endl; return(0); } … … 816 856 else if (kw == "shell") { 817 857 if (tokens.size() < 1) { cout << "PIACmd::Interpret() Usage: shell cmdline" << endl; return(0); } 818 system(toks.c_str()); 819 } 858 string cmd; 859 for (int ii=0; ii<tokens.size(); ii++) 860 cmd += (tokens[ii] + ' '); 861 system(cmd.c_str()); 862 } 863 820 864 // Execution d'une commande enregistree 821 // CMV c'est ici qu'il faut passer la string822 865 else rc = ExecuteCommand(kw, tokens, toks); 823 866 … … 894 937 // Setting $0 ... $99 variables 895 938 int k; 896 CmdVarList::iterator it;897 939 char buff[32]; 898 940 // First, we clear all previous values
Note:
See TracChangeset
for help on using the changeset viewer.