/************************************************************************ ** ** FILE : cellrefr.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "cellrefr.h" #include "cell.h" #include /************************************************************************* ** FUNKTION: ObjectToRList ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ static void ObjectToRList( h, v) OBJECT *h; /* einzutragendes Objekt */ OBJECT *v; /* RefreshListe */ { OBJECT *g; /* zu untersuchendes Objekt */ g = v->next; /**** WENN OBJEKT NICHT IN LISTE GEHE BIS ZUM ENDE ********************/ while (g) { if ( (g->Nr1 == h->Nr1) && (g->typ == h->typ) ) return; v = g; g = g->next; } /**** OBJEKT AN DAS ENDE DER REFRESH-LISTE ANHAENGEN ******************/ g = (OBJECT *)malloc( sizeof( OBJECT)); g->typ = h->typ; g->Nr1 = h->Nr1; g->Nr2 = h->Nr2; g->next = NULL; v->next = g; } /************************************************************************* ** FUNKTION: KanteToRList ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ static void KanteToRList( h, v) OBJECT *h; /* einzutragendes Objekt */ OBJECT *v; /* RefreshListe */ { OBJECT *g; /* zu untersuchendes Objekt */ g = v->next; /**** WENN KANTENOBJEKT NICHT IN LISTE GEHE BIS ZUM ENDE *************/ while (g) { if ( (g->Nr1 == h->Nr1) && (g->Nr2 == h->Nr2) && (g->typ == h->typ) ) return; v = g; g = g->next; } /**** KANTENOBJEKT AN DAS ENDE DER REFRESH-LISTE ANHAENGEN ***********/ g = (OBJECT *)malloc( sizeof( OBJECT)); g->typ = h->typ; g->Nr1 = h->Nr1; g->Nr2 = h->Nr2; g->next = NULL; v->next = g; } /************************************************************************* ** FUNKTION: CellObjToRList ** ZWECK: wenn Objekt h noch nicht in der Refresh Liste ist, ** wird es eingetragen. ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: Falls nach einem Loeschen das Neuzeichnen zu langsam ** geht, sollte eine Refreshliste gefuehrt werden. *************************************************************************/ void CellObjToRList( h) OBJECT *h; { char typ = h->typ; KanteToRList( h, CellRefreshList); /* if ( (typ == CE_TS_KANTE) || (typ == CE_ST_KANTE) || (typ == CE_ST_KANTE) || (typ == CE_TS_KANTE) ) KanteToRList( h, CellRefreshList); else ObjectToRList( h, CellRefreshList); */ }