// Modellname: synch10      SS 2000

// 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


class SignalDaten : public UserData {   //Datenstruktur fuer Signale
public:
   SignalDaten() : UserData() {};
   int signal;
   
   char *LabelString ();
   char *ParaString ();
};

char *SignalDaten::LabelString (){
	ObjLabelString = "Zeit Signal";
	return ObjLabelString.str();
}
char *SignalDaten::ParaString (){
	char Parameter[80];
	sprintf (Parameter, " %6.2f %2i", Modellzeit().inMinutes(), signal);
	ObjParaString = Parameter;
	return ObjParaString.str();
}

void _impexp initBstSignal (int bstNr, int sig){
  SignalDaten *zS = new SignalDaten ();
  zS->signal      =  sig;
  setBstUserData (bstNr, zS);
}


void  _impexp init_prog () {
  initBstSignal (6, 0);
}

void  _impexp prog_100 () {            //Baustein-Programm mit Programmnummer 100 
  SignalDaten *zS = (SignalDaten *)BstUserData (6);
  aufnehmen ();
  if (zS->signal == 0) warten ();
  arbeiten ();
  abgeben ();
  aktivieren (6);
}

void  _impexp prog_200 () {           //Baustein-Programm mit Programmnummer 200 
  SignalDaten *zS = (SignalDaten *)BstUserData (This);
  aufnehmen ();
  arbeiten ();
  zS->signal = 1;
  aktivieren (3);
  warten ();
  warten();		             //...bis zweites Teil auf Bst 3 fertig
  zS->signal = 0;
  abgeben ();
}
 
void  _impexp exit_prog () {
 }