// $Source: /usr/local/SimSoft/Sfx3D/src/gts/gtsglob.cpp,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:10 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name: Release-14 $
// State assigned to revision
// $State: Exp $
//
//
// $Log: gtsglob.cpp,v $
// Revision 1.2  2001/11/29 15:18:10  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

/*** Windows headers ***/
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
//#include <winnt.h>
#endif /*WIN32*/

//#include <stdlib.h>
//#include <string.h>

#include <time.h>

#include "gtsglob.h"
#include "gtsio.h"
#include "gtsmdg.h"


GTSCallback  GTSCB;
Ustring ExpName;
Ustring ExpExtension;
Ustring ModellIniDatei;
Ustring Pfad;
Ustring BausteinBibliothek;
Ustring PalettenBibliothek;
typBibliothek          *TgbBibliothek    = NULL;
Bibliothek             *PalBibliothek    = NULL;
typBausteinListe       *BausteinListe    = NULL;
typFahrkursListe       *FahrkursListe    = NULL;
EreignisVerwaltung     *EreignisListe    = NULL;
ProzessVerwaltung      *ProzessListe     = NULL;
ArbeitsplanVerwaltung  *ArbeitsplanListe = NULL;
typMeldung Meld;

typBaustein *ZBSTAKTIV = NULL;

int    LASTBSTNR     = 0;
int    LASTFKNR      = 0;
int    LASTAFNR      = 0;
int    KLEINSTEBSTNR = 1;
int    LASTPROZESS   = 0;
bool   EndeEingabe   = false;
bool   testprog      = false;
bool   initprog      = false;


double ModellRelease;

InputFile *fbb;

Space     *GTSSpace = NULL;
ToglView  *GTSView  = NULL;
SFXViewHandler *MainViewHandler = NULL;
Tcl_Interp *GTSInterpreter = NULL;
char DlgBuffer[8192];

Attribute *BlauAttribute = ColorAttribute::create("blue"); // oder?!

Map<typBaustein, GeoObject> GTSMAP(3);


void GTS_Meldungen (char *str)
{
  sprintf  (DlgBuffer,"put_win {%s}", str);
  Tcl_Eval (GTSInterpreter, DlgBuffer);
}  // ENDE GTS_Meldungen

int ArgInt(const char *arg)
{
  int iwert = 0;
  sscanf(arg, "%d", &iwert);
  return iwert;
}  // ENDE ArgInt

int GTSMsgHandleFunc (int msgType, const char* txt) {
  if (msgType == MSG_WARNING)
    sprintf(DlgBuffer, "tk_messageBox -title Warning -icon warning "
                 "-type ok -message {%s}", txt);
  else
    sprintf(DlgBuffer, "tk_messageBox -title Error -icon error "
                 "-type ok -message {%s}; exit", txt);

  Tcl_Eval (GTSInterpreter, DlgBuffer);
  if (msgType == MSG_ERROR)
      Tcl_Eval (GTSInterpreter, (char*)Ustring("GTSExit").str());
  return 1;
}


void setReleaseVersion (double rel) {
   ModellRelease = rel;
}
double getReleaseVersion () {
   return ModellRelease;
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DateiKopfSchreiben (ostream& ostrm, const Ustring typ)
{
  time_t ZeitDatum;
  Ustring Tmp (ExpName);
  Tmp.delPart (0, Tmp.findRightPos ('/') + 1);
  time(&ZeitDatum);
  Write (ostrm, "   1   %s.%s  <GTS-Version>  Erstellt: %s",
                 Tmp.str(), typ.str(), ctime(&ZeitDatum));
}  // ENDE DateiKopfSchreiben

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DateiFussSchreiben (ostream& ostrm, const Ustring typ)
{
  Ustring Tmp (ExpName);
  Tmp.delPart (0, Tmp.findRightPos ('/') + 1);
  Write (ostrm, "%d\n", -1);
  Write (ostrm, "%d   =====  ENDE  %s.%s  =====\n", -999, Tmp.str(), typ.str());
}  // ENDE DateiFussSchreiben

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool pruefeTBVEingabe (unsigned int vonbsttyp, unsigned int nachbsttyp)
{
  if (vonbsttyp == tLayout) return false;
  if (vonbsttyp == tSenke)
  {
     Meld.Ausgabe(5);
     return false;
  }
  if (!nachbsttyp) return true;

  if (nachbsttyp == tQuelle)
  {
    Meld.Ausgabe(6);
    return false;
  }
  if ((nachbsttyp == tVWagen)    || (nachbsttyp == tFtsWagen) ||
      (nachbsttyp == tLaufkran) || (nachbsttyp == tMehrfachLader))
  {
    if ((vonbsttyp == tVWagen)   || (vonbsttyp == tFtsWagen) ||
        (vonbsttyp == tLaufkran) || (vonbsttyp == tMehrfachLader))
    {
      Meld.Ausgabe(4, vonbsttyp, nachbsttyp);
      return false;
    }
  }
  return true;
}  // ENDE pruefeTBVEingabe


