home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************
- * *
- * Filename : ListL2.c *
- * *
- *****************************************************************
- * *
- * Comment : Alle Funktionen für die Listenverwaltung der *
- * Plotlibrary. Es werden hier keine Fehler gesetzt, *
- * denn es wird der einfachheit halber immer ein *
- * Pointer zurückgegeben. Dieser kann NULL sein. *
- * *
- * Funktionen *
- * ========== *
- * *
- * addlist() fügt eine Kurvenstruktur in die Liste *
- * dellist() löscht Kurve aus der Liste *
- * sortlist() sortiert die Liste nach zmin *
- * slistid() sucht eine bestimmte Kurve nach id *
- * slistname() sucht eine bestimmte Kurve nach name *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 15/11/89 *
- * *
- * Doc : Plotlibrary User's Guide *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 10/12/89 *
- * *
- ****************************************************************/
-
- /****************************************************************
- * *
- * Plotlibrary Includedateien *
- * *
- ****************************************************************/
-
- #include "Plot.h" /* all. Includes einlesen */
- #include "ListL2.h" /* und die eigene */
-
- /****************************************************************
- * *
- * externe Variablen *
- * *
- ****************************************************************/
-
- extern struct Plot *plot; /* Plotpointer */
- extern int plerr; /* Fehlervariable */
-
- /****************************************************************
- * *
- * Function : addlist() *
- * *
- *****************************************************************
- * *
- * Input : curve *
- * struct Curve *curve *
- * *
- * Output : void *
- * *
- *****************************************************************
- * *
- * Comment : fügt eine Kurvenstruktur an die bestehende Liste *
- * an. Die Kurvenid wird in die Kurvenstruktur *
- * eingetragen. *
- * *
- ****************************************************************/
-
- void addlist(curve)
- struct Curve *curve;
- {
- struct Curve *temp; /* temp. Kurvenzeiger */
-
- if (plot->last == NULL) /* keine Kurve vorhanden ? */
- plot->first = curve; /* also erste */
- else /* sonst an das ende der */
- { /* Liste addieren */
- temp = plot->last; /* hole letzte Kurve */
- temp->next = curve; /* neue als next eintragen */
- }
- plot->last = curve; /* und last updaten */
- plot->count++; /* erhöhe plotcounter */
- curve->id = ++plot->currid; /* id eintragen */
- }
-
- /****************************************************************
- * *
- * Function : dellist() *
- * *
- *****************************************************************
- * *
- * Input : curve *
- * struct Curve *curve *
- * *
- * Output : void *
- * *
- *****************************************************************
- * *
- * Comment : löscht eine Kurve aus der Liste und korrigiert die *
- * Pointer. ACHTUNG : Es muss sichergestellt sein, *
- * dass die curve in der Liste enthalten ist. Dafür *
- * kann slistid() oder slistname() verwendet werden. *
- * *
- * Die Liste ist so aufgebaut: *
- * *
- * plot->first zeigt auf erste Kurve, wenn keine *
- * Daten geladen ist dieser Zeiger *
- * NULL. *
- * *
- * plot->last zeigt auf letzte Kurve, wenn keine *
- * Daten geladen ist dieser Zeiger *
- * NULL. *
- * *
- * curve->next zeigt auf die nächste Kurve, wenn *
- * letzte Kurve (plot->last) Zeiger *
- * ist NULL. *
- * *
- ****************************************************************/
-
- void dellist(curve)
- struct Curve *curve;
- {
- struct Curve *prev = NULL, /* prev auf null setzten */
- *temp = plot->first; /* temp auf first setzten */
-
- while (temp != curve) /* suche bis gefunden */
- {
- prev = temp; /* auf nächstes Element */
- temp = temp->next; /* stellen */
- }
-
- if (prev == NULL) /* kein Vorgänger ? */
- plot->first = temp->next; /* dann ist es die erste */
- /* Kurve in der Liste */
- else /* und sonst irgendwo da- */
- prev->next = temp->next; /* zwischen, auch das */
- /* Element wird gesetzt */
- if (plot->last == temp) /* korrigiere wenn nötig */
- plot->last = prev; /* plot->last */
- plot->count--; /* eine Kurve weniger */
- }
-
- /****************************************************************
- * *
- * Function : sortlist() *
- * *
- *****************************************************************
- * *
- * Input : curve *
- * struct Curve *curve *
- * *
- * Output : void *
- * *
- *****************************************************************
- * *
- * Comment : SortList() sortiert alle Kurven nach ihren zmin *
- * Werten. Diese Funktion wird für die Niveau- *
- * darstellung benötigt. Es wird ein linearer *
- * Sortieralgorythmus verwendet. *
- * *
- ****************************************************************/
-
- void sortlist()
- {
- int i;
- struct Curve **prev, /* Adr. des Kurvenzeigers */
- *curve, /* Kurvenzeiger */
- *next; /* nächste Kurve */
-
- for (i=0;i<plot->count;i++) /* für alle Kurven */
- {
- prev = &plot->first; /* Pointerinit. */
- curve = plot->first;
- next = curve->next;
- while((curve) and (next)) /* solange Daten vorhanden */
- {
- if (curve->zmin > next->zmin) /* muss sortiert werden */
- { /* Ja */
- *prev = next; /* Austausch mit diesem */
- curve->next = next->next; /* Element */
- next->next = curve;
- prev = &next->next;
- next = curve->next;
- }
- else /* Nein, keine Sortierung */
- {
- prev = &curve->next; /* also nächstes Element */
- curve = next; /* nehmen */
- next = curve->next;
- }
- }
- }
- }
-
- /****************************************************************
- * *
- * Function : slistid() *
- * *
- *****************************************************************
- * *
- * Input : id *
- * int id id der gesuchten Kurve *
- * *
- * Output : struct Curve *curve *
- * curve != NULL Kurve gefunden *
- * curve == NULL keine Kurve gefunden *
- * *
- *****************************************************************
- * *
- * Comment : Durchsucht die Kurvenliste nach der entsprechenden *
- * Nummer. Der Rückgabewert ist der Kurvenzeiger *
- * oder ein NULL-Pointer. *
- * *
- ****************************************************************/
-
- struct Curve *slistid(id)
- int id;
- {
- struct Curve *temp = plot->first; /* temp auf first setzten */
-
- while ((id != temp->id) and /* suche bis gefunden oder */
- (temp != NULL)) /* bis ende der Liste */
- temp = temp->next; /* nicht gefunden nächste */
- /* Kurve */
- if (temp == NULL) /* setzte Fehler falls */
- seterror(NOTFOUND); /* nicht gefunden */
- return (temp);
- }
-
- /****************************************************************
- * *
- * Function : slistname() *
- * *
- *****************************************************************
- * *
- * Input : name *
- * *char name name der gesuchten Kurve *
- * *
- * Output : struct Curve *curve *
- * curve != NULL Kurve gefunden *
- * curve == NULL keine Kurve gefunden *
- * *
- *****************************************************************
- * *
- * Comment : Durchsucht die Kurvenliste nach dem entsprechenden *
- * Namen. Der Rückgabewert ist der Kurvenzeiger *
- * oder ein NULL-Pointer. *
- * *
- ****************************************************************/
-
- struct Curve *slistname(name)
- char *name;
- {
- struct Curve *temp = plot->first; /* temp auf first setzten */
-
- while ((strcmp(name,temp->titel) != NULL) and
- /* suche bis gleiche Namen */
- (temp != NULL)) /* oder ende der Liste */
- temp = temp->next; /* nicht gefunden, nächste */
- /* Kurve */
- if (temp == NULL) /* setzte Fehler falls */
- seterror(NOTFOUND); /* nicht gefunden */
- return (temp); /* und zurück */
- }
-
-