// Modellname: bdeanlag

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

const int Maschine1     = 1;
const int Maschine2     = 2;
const int Verteilwagen  = 3;
const int BdeBst        = 10;
const int BdeSchreiben  = 999;

char Ausl_BDE[] = "d:\\sfx3d-seminar\\bde\\Ausl_bde.out";
char DLZ_BDE[] = "d:\\sfx3d-seminar\\bde\\DLZ_bde.out";
FILE *Ausl_BdeDatei = NULL;
FILE *DLZ_BdeDatei = NULL;

void _impexp init_prog () {
  Ausl_BdeDatei = fopen (Ausl_BDE, "w");
  fclose (Ausl_BdeDatei);
  DLZ_BdeDatei = fopen (DLZ_BDE, "w");
  fclose (DLZ_BdeDatei);
  installProg (999);
  planeEin (SimTime::convertMinutes (12.0), ETprogramm, BdeBst, BdeSchreiben);
}

void _impexp prog_999 () {             // BDE-Programm auf Baustein 10
  Ausl_BdeDatei = fopen (Ausl_BDE, "a");
  fprintf (Ausl_BdeDatei, "%5.2f ; %5.2f ; %5.2f ; %5.2f\n",
           Modellzeit ().inHours (), MitAuslastung (Maschine1), 
           MitAuslastung (Maschine2), MitAuslastung (Verteilwagen));
  fclose (Ausl_BdeDatei);
  
  DLZ_BdeDatei = fopen (DLZ_BDE, "a");
  fprintf (DLZ_BdeDatei, "%5.2f ; %7.2f ; %5.2f ; %5.2f ; %5.2f ; %5.2f ; %5.2f ; %5.2f \n",
           Modellzeit ().inHours (), MinDurchlaufzeit (1010).inMinutes (),
           MitDurchlaufzeit (1010).inMinutes (), //SumVorgangszeiten (1010),
           MaxDurchlaufzeit (1010).inMinutes (),
           MinDurchlaufzeit (1020).inMinutes (), MitDurchlaufzeit (1020).inMinutes (), 
           MaxDurchlaufzeit (1020).inMinutes ());
  fclose (DLZ_BdeDatei);

  if (Modellzeit () < Modellende ())
    planeDelta (SimTime::convertMinutes (12.0), ETprogramm, BdeBst, BdeSchreiben);
  else
    simAbbruch ();
}

void _impexp exit_prog () {
}
