| 1 | #include <stdlib.h>
 | 
|---|
| 2 | #include <stdio.h>
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #include "pistdimgapp.h"
 | 
|---|
| 5 | #include "piacmd.h"
 | 
|---|
| 6 | #include "piversion.h"
 | 
|---|
| 7 | #include "piaversion.h"
 | 
|---|
| 8 | 
 | 
|---|
| 9 | #include "timing.h"
 | 
|---|
| 10 | #include "outilsinit.h"
 | 
|---|
| 11 | 
 | 
|---|
| 12 | 
 | 
|---|
| 13 | 
 | 
|---|
| 14 | 
 | 
|---|
| 15 | /*  ================================ MAIN() =================================  */
 | 
|---|
| 16 | 
 | 
|---|
| 17 | int main(int narg, char *arg[])
 | 
|---|
| 18 | {
 | 
|---|
| 19 | int ofa;
 | 
|---|
| 20 | int fgfpe, fgsegv, fgred, fgexec;
 | 
|---|
| 21 | 
 | 
|---|
| 22 | PeidaInit();
 | 
|---|
| 23 |    
 | 
|---|
| 24 | InitTim();
 | 
|---|
| 25 | 
 | 
|---|
| 26 | ofa = 1;   
 | 
|---|
| 27 | if (narg > 1)
 | 
|---|
| 28 |   {
 | 
|---|
| 29 |   if (strcmp(arg[1],"-h") == 0) 
 | 
|---|
| 30 |     {
 | 
|---|
| 31 |     puts("\n piapp: Programme d'analyse interactive ");
 | 
|---|
| 32 |     puts("Usage: piapp [-nored] [-nosig] [-nosigfpe] [-nosigsegv] [-help2tex] [-exec file [args]]");
 | 
|---|
| 33 |     puts("  -nored : NoRedirect StdOut/StdErr");
 | 
|---|
| 34 |     puts("  -nosig : Don't catch SigFPE, SigSEGV");
 | 
|---|
| 35 |     puts("  -nosigfpe -nosigsegv: Don't catch SigFPE / SigSEGV");
 | 
|---|
| 36 |     puts("  -help2tex: Create a LaTeX help file (piahelp.tex)");
 | 
|---|
| 37 |     puts("  -exec file [args] : Execute command file \n");
 | 
|---|
| 38 |     exit(0);
 | 
|---|
| 39 |     }
 | 
|---|
| 40 |   }
 | 
|---|
| 41 | 
 | 
|---|
| 42 | ofa = 1;
 | 
|---|
| 43 | fgred = fgfpe = fgsegv = true;
 | 
|---|
| 44 | fgexec = false;
 | 
|---|
| 45 | string exfc;
 | 
|---|
| 46 | // Pour fabriquer le help
 | 
|---|
| 47 | bool fgtexh = false;
 | 
|---|
| 48 | int ka;
 | 
|---|
| 49 | for(ka=1; ka<narg; ka++) {
 | 
|---|
| 50 |   if (strcmp(arg[ka],"-nored") == 0)   fgred=false; 
 | 
|---|
| 51 |   else if (strcmp(arg[ka],"-nosig") == 0)   fgfpe=fgsegv=false; 
 | 
|---|
| 52 |   else if (strcmp(arg[ka],"-nosigfpe") == 0)   fgfpe=false; 
 | 
|---|
| 53 |   else if (strcmp(arg[ka],"-nosigsegv") == 0)   fgsegv=false; 
 | 
|---|
| 54 |   else if (strcmp(arg[ka],"-help2tex") == 0) { fgtexh=true; fgred=false; }
 | 
|---|
| 55 |   else if (strcmp(arg[ka],"-exec") == 0) {
 | 
|---|
| 56 |     if (ka < narg-1) {
 | 
|---|
| 57 |       fgexec = true;
 | 
|---|
| 58 |       exfc = "exec";
 | 
|---|
| 59 |       for(int kaa=ka+1; kaa<narg; kaa++)  { exfc += ' ';  exfc +=  arg[kaa]; }
 | 
|---|
| 60 |       }
 | 
|---|
| 61 |     break;
 | 
|---|
| 62 |     }
 | 
|---|
| 63 |   }
 | 
|---|
| 64 | 
 | 
|---|
| 65 | if (fgexec) printf(">>>>> Starting piapp , Executing %s \n", exfc.c_str()); 
 | 
|---|
| 66 | else printf(">>>>> Starting piapp <<<<< \n");
 | 
|---|
| 67 | printf("Version: piapp=%g  PI=%g  PEIDA=%g \n", (double)PIAPP_VERSIONNUMBER, 
 | 
|---|
| 68 |               (double)PI_VERSIONNUMBER, (float)PeidaVersion());
 | 
|---|
| 69 | 
 | 
|---|
| 70 | PIStdImgApp * app = new PIStdImgApp(narg, arg);
 | 
|---|
| 71 | 
 | 
|---|
| 72 | // Gestion de redirection stdout/err et Signaux
 | 
|---|
| 73 | if (fgred) app->RedirectStdOutErr(true);
 | 
|---|
| 74 | else app->RedirectStdOutErr(false);
 | 
|---|
| 75 | app->CatchSignals(fgfpe, fgsegv);
 | 
|---|
| 76 | 
 | 
|---|
| 77 | // S'il y a un fichier de commande a executer
 | 
|---|
| 78 | if (fgexec) app->CmdInterpreter()->Interpret(exfc);
 | 
|---|
| 79 | 
 | 
|---|
| 80 | // S'il y a besoin de faire le fichier Help
 | 
|---|
| 81 | if (fgtexh) { 
 | 
|---|
| 82 |   string thf = "piahelp.tex";
 | 
|---|
| 83 |   app->CmdInterpreter()->HelptoLaTex(thf);
 | 
|---|
| 84 |   printf("piapp : Help file piahelp.tex created --> exit(0) \n"); 
 | 
|---|
| 85 |   delete app;
 | 
|---|
| 86 |   exit(0);
 | 
|---|
| 87 | }
 | 
|---|
| 88 | 
 | 
|---|
| 89 | int rc = 0;
 | 
|---|
| 90 | bool cont = true;
 | 
|---|
| 91 | while(cont) {
 | 
|---|
| 92 |   rc = 0;   cont = false;
 | 
|---|
| 93 |   app->SetReady();
 | 
|---|
| 94 |   if (fgred) app->RedirectStdOutErr(true);
 | 
|---|
| 95 |   try {
 | 
|---|
| 96 |   app->Run();
 | 
|---|
| 97 |   }  catch ( PException exc ) {
 | 
|---|
| 98 |      char ans[32],rep;
 | 
|---|
| 99 |      app->Stop();
 | 
|---|
| 100 |      app->RedirectStdOutErr(false);  
 | 
|---|
| 101 |      fflush(stdout); 
 | 
|---|
| 102 |      cout << endl; 
 | 
|---|
| 103 |      cerr << endl;
 | 
|---|
| 104 |      cerr << "PIStdImg/main() Exception catched ! " << exc.Msg() << endl;
 | 
|---|
| 105 |      cerr << " continue <CR> , Stop program S<CR> ? " << endl;  gets(ans);
 | 
|---|
| 106 |      rc = 9;
 | 
|---|
| 107 |      rep = toupper(ans[0]);  
 | 
|---|
| 108 |      if (rep == 'S')  { 
 | 
|---|
| 109 |        printf(" !!!! Stopping piapp !!!! \n"); 
 | 
|---|
| 110 |        cont = false;
 | 
|---|
| 111 |        }
 | 
|---|
| 112 |      else { 
 | 
|---|
| 113 |        printf(" *** piapp - Continuing event loop *** \n");
 | 
|---|
| 114 |        cont = true;
 | 
|---|
| 115 |        }
 | 
|---|
| 116 | //     else { cont = true; if (rep == 'K') app->CloseAllWindows(); }
 | 
|---|
| 117 |   } ENDTRY;
 | 
|---|
| 118 | }
 | 
|---|
| 119 | 
 | 
|---|
| 120 | app->RedirectStdOutErr(false);  
 | 
|---|
| 121 | // On de-charge le module erospiamodule
 | 
|---|
| 122 | delete app;
 | 
|---|
| 123 | 
 | 
|---|
| 124 | printf("piapp : Exiting .... Rc= %d \n", rc); 
 | 
|---|
| 125 | exit(rc);
 | 
|---|
| 126 | }
 | 
|---|
| 127 | 
 | 
|---|