/************************************************************************ ** ** FILE : simbreak.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "simbreak.h" #include "sim.h" #include "celltype.h" #include "misc.h" /************************************************************************* ** FUNKTION: SimBreakInit ** ZWECK: Initialisiert BreakList mit einem Startobjekt. ** GLOBAL: SimBreakList zeigt auf ein Startobjekt. ** ANMERK: Das Startobjekt hat keine weitere Bedeutung ausser ** dass es Einfuege und Loeschoperationen vereinfacht. *************************************************************************/ void SimBreakInit() { BreakList = (OBJECT *)malloc( sizeof( OBJECT)); BreakList->next = NULL; } /************************************************************************* ** FUNKTION: SimBreakAddBL ** ZWECK: Fuegt eine Stelle oder eine Transition in die ** BreakList ein, FALLS sie noch nicht drin sind. ** EINGABE: Typ und Nummer des einzufuegenden Objektes ** ANMERK: Objekt wird am Ende eingefuegt. BreakList hat somit ** eine aufsteigende Ordnung. *************************************************************************/ void SimBreakAddBL( Typ, nr) char Typ; int nr; { OBJECT *v; /* Vorgaenger */ OBJECT *b; /* eigentliches Objekt der Betrachtung */ v = BreakList; b = v->next; while ( (b) ) { if ( (b->Nr1 == nr) && (b->typ == Typ) ) /* Objekt schon drin ? */ return; v = b; b = b->next; } b = (OBJECT *)malloc( sizeof( OBJECT)); b->typ = Typ; b->Nr1 = nr; b->next = NULL; v->next = b; } /************************************************************************* ** FUNKTION: SimBreakClearBL ** ZWECK: Loescht BreakList. ** GLOBAL: BreakList wird auf Startobjekt reduziert. *************************************************************************/ void SimBreakClearBL() { OBJECT *d; /* zu loeschendes Objekt */ OBJECT *b; /* eigentliches Objekt der Betrachtung */ if ( !(b=BreakList->next) ) return; BreakList->next = NULL; d=b; do { b = b->next; free( d); } while ( (d=b) ); }