/************************************************************************ ** ** FILE : simfire.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "simfire.h" #include "hasetmisc.h" #include "simmisc.h" #include "simaktiv.h" #include "simkon.h" #include #define StepS( t) if ( (SimStepS( (t) )) ) return BREAK_SET; else return NORMAL #define StepP() if ( (SimStepP()) ) return BREAK_SET; else return NORMAL /************************************************************************* ** FUNKTION: SimFireS ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ static char SimFireS() { if ( !(nAktiv) ) /* NETZ LEBENDIG ? */ return TOT; if (nAktiv == 1) /* GENAU 1 TRANS AKTIV ? */ StepS( SimGetFirstT( AKTIV) ); if ( !(HaSetZufall) ) /* AUSWAHL DURCH BENUTZER ? */ return KONFLIKT; StepS( SimGetRandomT( AKTIV) ); /* AUSWAHL DURCH ZUFALL ! */ } /************************************************************************* ** FUNKTION: SimFireP ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ static char SimFireP() { int TNr; SimKonflikt(); if ( !(nAktiv) ) /* NETZ LEBENDIG ? */ return NORMAL; if (nAktiv == 1) /* GENAU 1 TRANS AKTIV ? */ StepS( SimGetFirstT( AKTIV) ); if( !(nKonflikt) ) /* KONFLIKTE ? */ StepP(); return KONFLIKT; } /************************************************************************* ** FUNKTION: SimFire ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ char SimFire() { int TNr; if (SimTouched()) { /* MARKIERUNG AKTUELL ? */ SimUnTouch(); SimCopyToMark(); } SimAktiv(); if ( !(nAktiv) ) return TOT; if ( (HaSetSeriell) ) return ( SimFireS() ); if ( !(HaSetZufall) ) return ( SimFireP() ); while ( SimFireP() == KONFLIKT ) { TNr = SimGetRandomT( KONFLIKT); SimStepS( TNr); SimRemoveKonMenge( TNr); SimAktivOnTC(); } if ( (BreakList->next) ) return BREAK_SET; else return NORMAL; } /************************************************************************* ** FUNKTION: SimFireAgain ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ char SimFireAgain( TNr) int TNr; { char erg; if ( (HaSetSeriell) ) StepS( TNr); SimStepS( TNr); SimRemoveKonMenge( TNr); SimAktivOnTC(); if ( (erg=SimFireP()) != NORMAL) return erg; else return ( ((BreakList->next) ? BREAK_SET : NORMAL) ); }