| [224] | 1 | #include <stdlib.h> | 
|---|
|  | 2 | #include <stdio.h> | 
|---|
|  | 3 |  | 
|---|
| [499] | 4 | #include "pistdimgapp.h" | 
|---|
|  | 5 | #include "piacmd.h" | 
|---|
|  | 6 | #include "piversion.h" | 
|---|
|  | 7 | #include "piaversion.h" | 
|---|
| [224] | 8 |  | 
|---|
|  | 9 | #include "timing.h" | 
|---|
| [499] | 10 | #include "outilsinit.h" | 
|---|
| [224] | 11 |  | 
|---|
|  | 12 |  | 
|---|
|  | 13 |  | 
|---|
|  | 14 |  | 
|---|
|  | 15 | /*  ================================ MAIN() =================================  */ | 
|---|
|  | 16 |  | 
|---|
|  | 17 | int main(int narg, char *arg[]) | 
|---|
|  | 18 | { | 
|---|
|  | 19 | int ofa; | 
|---|
| [499] | 20 | int fgfpe, fgsegv, fgred, fgexec; | 
|---|
| [224] | 21 |  | 
|---|
| [499] | 22 | PeidaInit(); | 
|---|
| [224] | 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 "); | 
|---|
| [499] | 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"); | 
|---|
| [224] | 38 | exit(0); | 
|---|
|  | 39 | } | 
|---|
|  | 40 | } | 
|---|
|  | 41 |  | 
|---|
|  | 42 | ofa = 1; | 
|---|
| [499] | 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 | } | 
|---|
| [224] | 64 |  | 
|---|
| [499] | 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()); | 
|---|
| [224] | 69 |  | 
|---|
| [499] | 70 | PIStdImgApp * app = new PIStdImgApp(narg, arg); | 
|---|
| [224] | 71 |  | 
|---|
| [499] | 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 |  | 
|---|
| [224] | 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); | 
|---|
| [499] | 95 | try { | 
|---|
| [224] | 96 | app->Run(); | 
|---|
| [499] | 97 | }  catch ( PException exc ) { | 
|---|
| [224] | 98 | char ans[32],rep; | 
|---|
|  | 99 | app->Stop(); | 
|---|
|  | 100 | app->RedirectStdOutErr(false); | 
|---|
|  | 101 | fflush(stdout); | 
|---|
|  | 102 | cout << endl; | 
|---|
|  | 103 | cerr << endl; | 
|---|
| [499] | 104 | cerr << "PIStdImg/main() Exception catched ! " << exc.Msg() << endl; | 
|---|
|  | 105 | cerr << " continue <CR> , Stop program S<CR> ? " << endl;  gets(ans); | 
|---|
|  | 106 | rc = 9; | 
|---|
| [224] | 107 | rep = toupper(ans[0]); | 
|---|
| [499] | 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(); } | 
|---|
| [224] | 117 | } ENDTRY; | 
|---|
|  | 118 | } | 
|---|
|  | 119 |  | 
|---|
|  | 120 | app->RedirectStdOutErr(false); | 
|---|
| [499] | 121 | // On de-charge le module erospiamodule | 
|---|
| [224] | 122 | delete app; | 
|---|
| [499] | 123 |  | 
|---|
| [224] | 124 | printf("piapp : Exiting .... Rc= %d \n", rc); | 
|---|
|  | 125 | exit(rc); | 
|---|
|  | 126 | } | 
|---|
|  | 127 |  | 
|---|