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

Last change on this file since 1451 was 1276, checked in by ercodmgr, 25 years ago

Amelioration de la syntaxe de l'interpreteur, gestion de quotes, ligne suite
Commande linkff2 (2eme groupe de link, pour utilisation par CxxExecutor
Amelioration de la gestion de TMPDIR

Reza 2/11/2000

File size: 5.0 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"
[165]20
[293]21
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);
[293]84
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); }
95 inline PIStdImgApp* GetImgApp() { return(mImgApp); }
96
[330]97// Pour utilisation par PIAHelpWind uniquement
98 virtual void UpdateHelpList(PIAHelpWind* hw, int gid);
99
[293]100protected:
[330]101 virtual int CheckHelpGrp(string& grp);
[1262]102 int ExecuteCommandLine(string & keyw, vector<string> & args,
103 string & toks);
[330]104
[1262]105 int SubstituteVars(string & s, string & s2);
106 bool EvaluateTest(vector<string> & args);
107
[165]108 NamedObjMgr* mObjMgr;
109 PIStdImgApp* mImgApp;
110
[293]111 CmdInterpreter* curcmdi;
[1224]112 CmdExecutor* basexec; // basic command executor
113 CmdExecutor* fitexec; // Fit command executor
114 CmdExecutor* pawexec; // paw-like command executor
115 CmdExecutor* cxxexec; // on-line c++ compile/execution command executor
[293]116
[330]117// Pour enregistrer la liste de commandes et leurs executeurs et le help
118 struct cmdex {int group; string us; CmdExecutor * cex; } ;
119 typedef map<string, int, less<string> > CmdHGroup; // Liste des groupes de commandes
120 CmdHGroup cmdhgrp;
121 int cmdgrpid; // Numero de groupe courant
[293]122 typedef map<string, cmdex, less<string> > CmdExmap;
123 CmdExmap cmdexmap;
[330]124 CmdExmap helpexmap; // Pour les helps sans commande
[293]125
126// Pour garder la liste des modules
127 typedef map<string, PDynLinkMgr* , less<string> > Modmap;
128 Modmap modmap;
129
130// Pour garder la liste des interpreteur
131 typedef map<string, CmdInterpreter*, less<string> > InterpMap;
132 InterpMap interpmap;
133
[165]134// Pour stocker les variables definies par l'interpreteur
[293]135 typedef map<string, string, less<string> > CmdVarList;
[349]136 CmdVarList mAliases; // Liste des alias
137
138 PIACmdBloc * curblk; // Bloc de commande courant (foreach, ...)
139 int felevel; // foreah level
[1262]140 list<bool> testresult; // Resultat des test if
141 list<bool>::iterator tresit; // Test courant
142 bool bloctest; // On est ds un bloc test
143 bool bloccxx; // On est ds un bloc code C++
[1276]144 string codecxx; // Bloc de code C++
145 bool mulinefg; // Bloc multi-lignes (ligne suite)
146 string mulinecmd; // Commande multi-lignes
[349]147
[165]148 ofstream hist; // History file
[349]149 bool histon; // True -> history file
[165]150 bool trace; // Trace flag
151 bool timing; // Display CPU Time
152 Timer* gltimer; // pour Display CPU Time
153
[293]154// Fenetre d'aide interactive
155 PIAHelpWind* helpwin;
[1251]156 CxxExecWind* cxxexwin;
157 CxxOptionWind* cxxoptwin;
[165]158};
159
[293]160
161
[165]162#endif
Note: See TracBrowser for help on using the repository browser.