// $Source: /usr/local/SimSoft/Sfx3D/template/Modell.cpp,v $
// $Revision: 1.13 $
// $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: Modell.cpp,v $
// Revision 1.13  2001/11/29 15:18:10  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//
//  

// Beispiel einer Datei der SIMFLEX/3D C++-Schnittstelle

// Die Makrodefinition '_impexp' dient zur Exportierung
// der Funktionen, Klassen und Variablen innerhalb der Library, 
// wird aber eigentlich nur fuer Windows benoetigt :-(

#ifdef WIN32
  #undef _impexp
  #define _impexp __declspec(dllexport)
#else
  #undef _impexp
  #define _impexp
#endif

#include <stdio.h>

#include "sfxprg.h"     // enthaelt die Funktionen der C-Schnittstelle

// Konstanten f. Programme
const int myprog  = 103;

// Konstanten f. Bausteine
const int aBst    = 21;

// benutzerdefinierbare Baustein-Daten-Struktur (vormals Bausteinsignale)
class _impexp BstData : public UserData {
  public:
    BstData () : UserData () { };
    int meine_nr;
};

// Initialisierung der Baustein-Daten-Struktur
void _impexp init_aBst () {
  BstData *zData = new BstData ();
  zData->meine_nr = 1;
  setBstUserData (aBst, zData);
}

//Baustein-Programm mit Programmnummer 103 aus Modell.TAS
void _impexp prog_103 () {
  BstData *zData = (BstData*)BstUserData(aBst);
  fprintf (stdout, "Meine Nummer = %d\n", zData->meine_nr);
  aufnehmen ();
  arbeiten ();
  abgeben (0);
}

// Event-Funktion des Bausteins aBst. Der Funktionsname ist beliebig und
// wird in der Funktion installEvent einem Ereignis zugeordnet.
void _impexp ETaarbeiten_aBst () {
  clog << "Hier ist Event ETaarbeiten auf " << This << endl;
}

// Diese Funktion wird automatisch nach der Modellinitialisierung gestartet,
// sofern sie vorhanden ist.
// In diese Funktion muessen auch alle Events eingetragen werden, damit sie 
// Initialisiert werden koennen. Fehlende Events in dieser Funktion werden
// nicht aufgerufen.
void _impexp init_prog () {
  init_aBst ();
  installEvent (ETaarbeiten, aBst, "ETaarbeiten_aBst");
}

// Diese Funktion wird automatisch beim Simulatorabbruch gestartet,
// sofern sie vorhanden ist.
void _impexp exit_prog () {
}



