source: Sophya/trunk/SophyaPI/PIext/piacmd.h@ 2203

Last change on this file since 2203 was 2203, checked in by cmv, 23 years ago

cshell command.... cmv 04/10/02

File size: 5.1 KB
RevLine 
[165]1// This may look like C code, but it is really -*- C++ -*-
2// Classe interpreteur de commande pour piapp
3// Reza Aout 97 , Juillet,Aout 98
4// LAL-IN2P3/CNRS
5
6#ifndef PIACMD_H_SEEN
7#define PIACMD_H_SEEN
8
[293]9#include "machdefs.h"
10#include <iostream.h>
[165]11#include <fstream.h>
12#include <string>
[293]13#include <vector>
[1262]14#include <list>
[165]15#include <map>
[351]16#include <functional>
[165]17
18#include "dlftypes.h"
[912]19#include "pdlmgr.h"
[1920]20#include "ctimer.h"
[165]21
[293]22// Classe definissant l'interface pour un executeur de commande
23class CmdExecutor {
24public:
25 virtual ~CmdExecutor() {} ;
26 // keyw : Le mot cle associe , args: Arguments de la commande
[1268]27 virtual int Execute(string& keyw, vector<string>& args, string& toks)=0;
[293]28};
29
30// Classe definissant l'interface pour un interpreteur de commande
31class CmdInterpreter {
32public:
33 virtual ~CmdInterpreter() {} ;
34 virtual string Name()=0;
35 virtual int Interpret(string& line)=0;
36};
37
38
39
40// Forward declaration of some classes ...
[165]41class NamedObjMgr;
42class PIStdImgApp;
[897]43#ifdef SANS_EVOLPLANCK
[293]44class Timer;
[897]45#else
46namespace SOPHYA {
47class Timer;
48}
49#endif
[1251]50
51class PIAHelpWind; // Fenetre d'aide en ligne
52class CxxExecWind; // Fenetre pour CxxExecutor
53class CxxOptionWind; // Option de CxxExecutor
54
[349]55class PIACmdBloc;
56
[293]57// ---------------------------------------------------------------------
58// Classe Interpreteur de commande, gestionnaire de module chargeable,
59// et de fonctions dynamiquement linke pour PIStdImgApp
60// Permet de gerer plusieurs Interpreter differents
61// ---------------------------------------------------------------------
[165]62
[330]63
[293]64class PIACmd : public CmdInterpreter {
[165]65public:
[293]66 static PIACmd* GetInterpreter();
[165]67
[293]68 PIACmd(NamedObjMgr* omg, PIStdImgApp* app);
69 virtual ~PIACmd();
70 virtual string Name();
71
[330]72 virtual void RegisterCommand(string& keyw, string& usage, CmdExecutor * ce,
[484]73 string grp="Commands");
[330]74 virtual void RegisterHelp(string& keyw, string& usage, string& grp);
[293]75 virtual void LoadModule(string& fnameso, string& name);
76
77 virtual void AddInterpreter(CmdInterpreter * cl);
78 virtual void SelInterpreter(string& name);
79
80 virtual int Interpret(string& line);
[1262]81 virtual int ParseLineExecute(string& line);
[1268]82 virtual int ExecuteCommand(string& keyw, vector<string>& args, string& toks);
[349]83 virtual int ExecFile(string& file, vector<string>& args);
[2203]84 virtual int CShellExecute(string cmd);
[293]85 virtual string& GetUsage(const string& kw);
86
[1251]87 void ShowHelpWindow();
88 void ShowCxxOptionWindow();
89 void ShowCxxExecWindow();
90
[463]91 virtual void HelptoLaTex(string const & flnm);
92
[293]93 inline CmdInterpreter* CurrentInterpreter() { return(curcmdi); }
94 inline CmdExecutor* BaseExecutor() { return(basexec); }
[1828]95 inline CmdExecutor* ContExecutor() { return(cntexec); } //_OP_
[293]96 inline PIStdImgApp* GetImgApp() { return(mImgApp); }
97
[330]98// Pour utilisation par PIAHelpWind uniquement
99 virtual void UpdateHelpList(PIAHelpWind* hw, int gid);
100
[293]101protected:
[330]102 virtual int CheckHelpGrp(string& grp);
[1262]103 int ExecuteCommandLine(string & keyw, vector<string> & args,
104 string & toks);
[330]105
[1262]106 int SubstituteVars(string & s, string & s2);
[1565]107 int EvaluateTest(vector<string> & args,
108 string & line, bool & res);
[1262]109
[165]110 NamedObjMgr* mObjMgr;
111 PIStdImgApp* mImgApp;
112
[293]113 CmdInterpreter* curcmdi;
[1224]114 CmdExecutor* basexec; // basic command executor
115 CmdExecutor* fitexec; // Fit command executor
116 CmdExecutor* pawexec; // paw-like command executor
117 CmdExecutor* cxxexec; // on-line c++ compile/execution command executor
[293]118
[1828]119 CmdExecutor *cntexec; // contour executor _OP_
[1920]120 CmdExecutor *flwexec; // flow chart executor _OP_
[1828]121
[330]122// Pour enregistrer la liste de commandes et leurs executeurs et le help
123 struct cmdex {int group; string us; CmdExecutor * cex; } ;
124 typedef map<string, int, less<string> > CmdHGroup; // Liste des groupes de commandes
125 CmdHGroup cmdhgrp;
126 int cmdgrpid; // Numero de groupe courant
[293]127 typedef map<string, cmdex, less<string> > CmdExmap;
128 CmdExmap cmdexmap;
[330]129 CmdExmap helpexmap; // Pour les helps sans commande
[293]130
131// Pour garder la liste des modules
132 typedef map<string, PDynLinkMgr* , less<string> > Modmap;
133 Modmap modmap;
134
135// Pour garder la liste des interpreteur
136 typedef map<string, CmdInterpreter*, less<string> > InterpMap;
137 InterpMap interpmap;
138
[165]139// Pour stocker les variables definies par l'interpreteur
[293]140 typedef map<string, string, less<string> > CmdVarList;
[349]141 CmdVarList mAliases; // Liste des alias
142
143 PIACmdBloc * curblk; // Bloc de commande courant (foreach, ...)
144 int felevel; // foreah level
[1565]145 list<char> testresult; // Resultat des test if
146 list<char>::iterator tresit; // Test courant
[1276]147 bool mulinefg; // Bloc multi-lignes (ligne suite)
148 string mulinecmd; // Commande multi-lignes
[349]149
[165]150 ofstream hist; // History file
[349]151 bool histon; // True -> history file
[165]152 bool trace; // Trace flag
153 bool timing; // Display CPU Time
154 Timer* gltimer; // pour Display CPU Time
155
[293]156// Fenetre d'aide interactive
157 PIAHelpWind* helpwin;
[1251]158 CxxExecWind* cxxexwin;
159 CxxOptionWind* cxxoptwin;
[165]160};
161
[293]162
163
[165]164#endif
Note: See TracBrowser for help on using the repository browser.