#ifndef __GOLEM_H
#define __GOLEM_H

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

bool goto_url(const char* url);
bool print_url(const char* url);

// @doc EXTERNAL

// @class TDDE | Classe per la gestione del DDE
//
// @base public | TObject
class TDDE : public TObject

// @comm Attualmente utilizzato all'avvio di PRASSI per comunicare al Program Manager il nome
//     dell'utente in modo da comunicarlo a tutti i programmi PRASSI avviati in seguito.

// @author:(INTERNAL) Guido

// @access:(INTERNAL) Private Member
{ 
  // @cmember:(INTERNAL) Handle della finestra Windows
  word _hwnd;
  // @cmember:(INTERNAL) Handle della finestra del server DDE
  word _server;
  // @cmember:(INTERNAL) Puntatore alla funzione di gestione dei messaggi
  long _old_hook;
  
// @access Public Member
public:                                                
  virtual bool do_initiate(word id, const TString& topic) { return FALSE; }
  virtual bool do_execute(word id, const TString& cmd) { return FALSE; }
  virtual bool do_ack(word id) { _server = id; return TRUE; }
  virtual bool do_terminate(word id) { return FALSE; }
  virtual bool do_custom_message(word msg, word wparam, long lparam) { return FALSE; }
  virtual const char* get_app_name() const { return NULL; }
  virtual const char* get_topics() const { return NULL; }

  // @cmember Stabilisce il collegamento dell'<p app> per i <p topic> indicati
  bool initiate(const char* app, const char* topic);
  // @cmember Esegue il comando <p cmd>
  bool execute(const char* cmd) const;
  // @cmember Lancia il server ed esegue un comando
  bool execute(const char* app, const char* topic, const char* cmd, const char* filename = NULL);
  // @cmember Chiude la connessione
  void terminate();
  
  
  // @cmember Inizia a fornire i servizi di DDE server
  bool start_server();
  
  word hwnd() const { return _hwnd; }

  // @cmember Costruttore
  TDDE();
  // @cmember Distruttore
  virtual ~TDDE();
};

#endif