// This may look like C code, but it is really -*- C++ -*-
// Classe interpreteur de commande pour piapp 
// Reza      Aout 97 , Juillet,Aout 98
// LAL-IN2P3/CNRS

#ifndef PIACMD_H_SEEN
#define PIACMD_H_SEEN

#include "machdefs.h"

#include <fstream.h>
#include <string>
#include <map>
#if defined(__KCC__)
using std::string ;
#include <map.h>
#endif

#include "pdlmgr.h"

#include "ctimer.h"
#include "dlftypes.h"

class NamedObjMgr;
class PIStdImgApp;


class PIACmd {
public:
		PIACmd(NamedObjMgr* omg=NULL, PIStdImgApp* app=NULL);
		~PIACmd();
  int		Exec(string& file);
  int		Do(string& line);

//  Link dynamique de fonction user
  int 		LinkUserFuncs(string& fnameso, string& func1, string& func2, string& func3);
//                            string& func4, string& func5);   compil avec g++ 2.7.2
  NamedObjMgr* mObjMgr;
  PIStdImgApp* mImgApp;
  bool mOmg;

//  Pour stocker les variables definies par l'interpreteur
typedef map<string, string, less<string> > CmdVarList;

  CmdVarList mVars;    // Liste des variables 
  ofstream hist;       //  History file 
  bool trace;          // Trace flag
  bool timing;         // Display CPU Time
  Timer* gltimer;      // pour Display CPU Time

// g++ n'arrive pas a avaler ca (lignes trop longues)  on utilise donc des DlFunction  (Reza 20/08/98)
// typedef map<string, DlUserProcFunction, less<string> > UsFmap;
typedef map<string, DlFunction, less<string> > UsFmap;
  PDynLinkMgr* dynlink;
  UsFmap usfmap;

};

#endif
