// $Source: /usr/local/SimSoft/Sfx3D/src/gts/gtstfk.h,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: gtstfk.h,v $
// Revision 1.2  2001/11/29 15:18:10  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _GTSTFK_H
#define _GTSTFK_H     1

#include "List.h"

class typFahrkurs
{
  protected:
    int Nr;
    List<typBstZeiger> StationsListe;
    typBaustein* zaufFTSVerwalter;
  
  public:
     typFahrkurs () : Nr (0), StationsListe (), zaufFTSVerwalter (NULL)  { };
     void append (typFahrkurs& flist);
     typBstZeiger* LetzteStationAusgliedern () 
                   { return StationsListe.removeLast(); };

     void s_FTSVerwalter (typBaustein* zFTS) { zaufFTSVerwalter = zFTS; };
     void s_Nummer (int nr) { Nr = nr; };
     int  i_Nummer () { return Nr; };
     void ZeigeFahrkurs ();
     void erzeugeStation (typBaustein* zbst);
     bool IstFahrkurs (typBaustein* zanfang);
     bool IstFahrkurs (typBaustein* zanfang, typBaustein* zende);
     bool IstFahrkursmitBaustein (typBaustein* zbstein);
     bool IstFahrkursmitBaustein (typBaustein* zbstein, typBaustein* zfolgebstein);
     void TFKSchreiben   (ostream& ostrm);
    ~typFahrkurs ();
}; // typFahrkurs

class typFahrkursListe
{
  protected:
    List<typFahrkurs> FkursListe;

    unsigned TFKArt (unsigned ATyp, unsigned ETyp);

  public:
    typFahrkurs* TMP_Fahrkurs;

    typFahrkurs* FahrkursErzeugen (typBaustein* zanfang, typBaustein* zende);
    typFahrkursListe        (): FkursListe(), TMP_Fahrkurs (NULL) { };
    typFahrkurs *Letztes    () { return FkursListe.Last(); };
    void TFKEingliedern     (typFahrkurs* zFahrkurs);
    bool TFKAnfangPruefen   (unsigned ATyp, const bool mitLogik = true);
    bool TFKEndePruefen     (unsigned ETyp, const bool mitLogik = true);
    bool TFKLogischeBausteinePruefen (unsigned ETyp);
    bool TFKPruefen         (typBaustein* zanfang, typBaustein* zende);
    void TFKErzeugen        (typBaustein* zanfang, typBaustein* zende);
    void TFKLoeschen        (typFahrkurs* zFahrkurs);
    void TFKmitBausteinLoeschen  (typBaustein* zbstein,
                                  typBaustein* zfolgebstein = NULL);
    typFahrkurs* TFKSuchen       (typBaustein* zanfang, typBaustein* zende);
    void TFKZeigen               (typBaustein* zanfang, typBaustein* zende);
    bool TFKLesen     (Ustring datname);
    void TFKSchreiben (Ustring datname);
    ~typFahrkursListe  ();
}; // typFahrkursListe

#endif /* _GTSTFK */
