// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
//             T H E         U R G E N T         D E C I S S I O N 
//                   
//             S P I E L C L I E N T :-)
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************


// Welche Includes debuggen ? *************************************************

//#define DEBUG
//#define DEBUG_iotype_H
//#define DEBUG_sprite_H
//#define DEBUG_listen_H
//#define DEBUG_listen_H_low
//#define DEBUG_communic_H
//#define DEBUG_tudvga_H


#include <iostream.h>
#include <signal.h>

#include "scrX11.H"
#include "communic.H"

#include "tudinc_client.H"



void parameterhelp()
{
  cout << "\nAllowed Parameters:\n"
       << "tudclient [hostname [userfilename]]\n"
       << "Default:\n"
       << "tudclient localhost\n"
       << "If the userfilename isn't specified I get one from the server.\n"
       << "Otherwise I will extend it like this XXXX -> users/XXXX.usr\n\n";
  exit(1);
}


void sighandler(int x)
{
  cout << "Received Signal: "<<x<<" => exit\n";
  gameptr->prepare_exit();
}



// *************************************** MAIN ****************************
// *************************************** MAIN ****************************
// *************************************** MAIN ****************************
// *************************************** MAIN ****************************
// *************************************** MAIN ****************************
// *************************************** MAIN ****************************

int main(int argc,char **argv)
{
  cout << "\n*-*-*-*-*-*  T-H-E  *-*-*-*  U-R-G-E-N-T  *-*-*-* D-E-C-I-S-I-O-N *-*-*-*-*-*\n"
       << "Client Ver. 0.8.0\n"
       << "Contact:                EMAIL: karme@unforgettable.com\n"
       << "Newest Version at:      http://www.geocities.com/TimesSquare/Castle/9663\n"
       << "This info may be out of date => read tud/doc/tud.html\n";

  // Parameterabfrage
  string server;
  string spielerfilename;
  if (argc<2)
    server="localhost";
  else 
    {
      server=argv[1];
      if (server==string("--help"))
	parameterhelp();
      if (argc==3)
	spielerfilename=argv[2];
      else if (argc>3)
	parameterhelp();
    }
	
  // sprite01.o Modul initen
  init_allsprites_kette("palette.ppm");
  // untergrundtabelle initen
  untergrundtabptr=new untergrundtabtype("untergrund.tab");
  // Die Fahrzeugtypen
  einheit_daten_ketteptr=new einheit_daten_kette_iqtype;
  // Die Objekttypen
  objekt_daten_ketteptr=new objekt_daten_kette_iqtype;
  // Die Fahrzeuge
  einheit_client_ketteptr=new einheit_client_kettetype;
  // Die Schuesse
  schuss_client_ketteptr=new schuss_client_kettetype;
  // Die Explosionen
  explosions_client_ketteptr=new explosions_client_kettetype;
  // Die Spieler
  spieler_ketteptr=new spieler_kettetype;

  gameptr=new gametype(server,spielerfilename,"setups/setup_client.set");

  signal(SIGINT,sighandler);
  signal(SIGTERM,sighandler);
  signal(SIGQUIT,sighandler);
  signal(SIGHUP,sighandler);

  while (!gameptr->calc());


  delete gameptr;
  delete spieler_ketteptr;
  delete explosions_client_ketteptr;
  delete einheit_client_ketteptr;
  delete schuss_client_ketteptr;
  delete objekt_daten_ketteptr;
  delete einheit_daten_ketteptr;
  delete untergrundtabptr;
  deinit_allsprites_kette();

  return(0);
};










