// Modellname: zug20

// 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 BstBeziehungen : public UserData {
public:
   BstBeziehungen() : UserData() {};
   int BstNr;
   int Puffer;
   int Schwelle;
   int Menge;
   int Lieferant;

   char *LabelString ();
   char *ParaString ();
};

char *BstBeziehungen::LabelString (){
	ObjLabelString = "Puffer Belegung Schwelle BestMenge Lieferant";
	return ObjLabelString.str();
}
char *BstBeziehungen::ParaString (){
	char Parameter[80];
	sprintf (Parameter, " %2i %2i %2i %2i %2i", 
	   Puffer, Belegung(Puffer), Schwelle, Menge, Lieferant);
	ObjParaString = Parameter;
	return ObjParaString.str();
}
void initBstBeziehungen(int bstNr, int puf, int schwelle, int menge, int lief){
  BstBeziehungen *zBez = new BstBeziehungen();
  zBez->BstNr          = bstNr;
  zBez->Puffer         = puf;  
  zBez->Schwelle       = schwelle;
  zBez->Menge          = menge;
  zBez->Lieferant      = lief;
  setBstUserData(bstNr, zBez);
}

void _impexp init_prog () {
  
  initBstBeziehungen (3, 11, 3, 2, 1);
  bestelleArtikel (10, 1);
  
  initBstBeziehungen (5, 12, 3, 2, 11);
  bestelleArtikel (10, 11);

  initBstBeziehungen (7, 13, 3, 2, 12);
  bestelleArtikel (10, 12);

  initBstBeziehungen (9, 14, 3, 2, 13);
  bestelleArtikel (10, 13);
}

void _impexp prog_100 () {
  BstBeziehungen *zBez = (BstBeziehungen *)BstUserData (This);
  aufnehmen ();
  if (Belegung (zBez->Puffer) < zBez->Schwelle)
      bestelleArbeitsplan (10, zBez->Lieferant, zBez->Menge);
  arbeiten ();
  abgeben ();
}

void _impexp exit_prog () {
}