#ifndef __EXECP_H
#define __EXECP_H

#ifndef __STRINGS_H
#include <strings.h>
#endif

// @doc EXTERNAL

// @class TExternal_app | Classe per l'esecuzione di oggetti esterni
//
// @base public | TObject
class TExternal_app : public TObject

// @author:(INTERNAL) Villa

// @comm Gli oggetti eseguiti dalla presente classe possono essere eseguiti
//       in background in tutti gli ambienti, oppure in modo sincrono.
//       <nl>Non sono implementate linee di comando; si suppone che l'utente
//       utilizzi la mailbox per questo.

// @access:(INTERNAL) Private Member
{
  
  // @cmember:(INTERNAL) Nome dell'applicazione (deve essere allocata dall'utente)
  TFilename _path;
  // @cmember:(INTERNAL) Ultimo exit code
  int _exitcode;

protected:
  void copy(const TExternal_app& a) { _path = a._path; _exitcode = 0; }

  // @access Public Member
public:
  // @cmember Controlla se l'utente puo' eseguire il programma
  bool can_run() const;
  // @cmember Esegue il processo
  long run(bool async = FALSE, byte user = TRUE, bool iconizetask = TRUE /*, bool showchild = TRUE */);
  // @cmember Ritorna l'ultimo codice di uscita
  int exitcode()
  { return _exitcode; }

  const TExternal_app& operator = (const TExternal_app& a)
  { copy(a); return a; }

  // @cmember Costruttore
  TExternal_app(const char* p);
  TExternal_app(const TExternal_app& a) { copy(a); }
  virtual ~TExternal_app() { }
};

#endif