home *** CD-ROM | disk | FTP | other *** search
- #include "Videothek_Includes.h"
- #include "Videothek_AppStruct.h"
- #include "Videothek_MyFunctions.h"
-
- void LoadData(struct App *userdata)
- {
- BPTR fp=Open("Videothek:Daten",MODE_OLDFILE);
- if (fp)
- {
- char filmtitel[50],kassette[10],minuten[10],art[10],quelle[10];
- Eintrag E;
- while (FGets(fp,filmtitel,sizeof(filmtitel)))
- {
- FGets(fp,(STRPTR)kassette,sizeof(kassette));
- FGets(fp,(STRPTR)minuten,sizeof(minuten));
- FGets(fp,(STRPTR)quelle,sizeof(quelle));
- FGets(fp,(STRPTR)art,sizeof(art));
- filmtitel[strlen(filmtitel)-1]=0;
- strcpy(E.Filmtitel,filmtitel);
- E.Kassette=atoi(kassette);
- E.Minuten =atoi(minuten);
- E.Quelle =atoi(quelle);
- E.Art =atoi(art);
- Einfueg(userdata->ListeEintraege,&E);
- }
- Close(fp);
- }
- else PrintFault(IoErr(),"Achtung");
- }
-
- void SaveData(struct App *userdata)
- {
- BPTR fp=Open("Videothek:Daten",MODE_NEWFILE);
- if (fp)
- {
- Eintrag *E;
- for (E=userdata->ListeEintraege.anfang;E;E=E->next)
- FPrintf(fp,"%s\n%ld\n%ld\n%ld\n%ld\n",E->Filmtitel,E->Kassette,E->Minuten,E->Quelle,E->Art);
- Close(fp);
- }
- else PrintFault(IoErr(),"Achtung");
- }
-
- /*************************************************************************/
- /* */
- /* Unterprogramme für die Listenverwaltung */
- /* */
- /*************************************************************************/
-
- struct NameNode {
- struct Node nn_Node; /* System Node structure */
- UBYTE nn_Data[80]; /* Node-specific data */
- };
-
- #define NAMENODE_ID 100 /* The type of "NameNode" */
-
- void Init(Liste &L)
- {
- L.anfang = NULL;
- L.ende = NULL;
- }
-
- Eintrag *Einfueg(Liste &L,Eintrag *eintrag)
- {
- Eintrag *neu = AllocVec(sizeof(struct Eintrag),MEMF_PUBLIC|MEMF_CLEAR);
-
- if (neu)
- {
- Eintrag *pos;
-
- neu->Kassette=eintrag->Kassette;
- neu->Minuten =eintrag->Minuten;
- neu->Quelle =eintrag->Quelle;
- neu->Art =eintrag->Art;
- strcpy(neu->Filmtitel,eintrag->Filmtitel);
-
- // Richtige Position zun Einfügen suchen:
- pos = L.anfang;
-
- while (pos!=0 && strcmp(pos->Filmtitel,eintrag->Filmtitel)<0) pos = pos->next;
-
- // Element in Liste einhängen, dabei diverse Sonderfälle beachten:
-
- if (pos == 0) // Sonderfall: Anfügen an das Ende der Liste
- {
- Eintrag *alt = L.ende; // altes Listenende
-
- if (alt != 0) // allgemeiner Unter-Fall: wirklich anhängen
- {
- alt->next = neu;
- neu->prev = alt;
- neu->next = 0;
- L.ende = neu;
- }
- else // spezieller Spezialfall: Liste ist noch leer
- {
- neu->next = 0;
- neu->prev = 0;
- L.anfang = neu;
- L.ende = neu;
- }
- }
- else if (pos->prev == 0) // Sonderfall: Neues Element an Listenanfang hängen
- {
- pos->prev = neu;
- neu->next = pos;
- neu->prev = 0;
- L.anfang = neu;
- }
- else // allgemeiner Fall: Element in Liste einhängen
- {
- Eintrag *vor = pos->prev; // "neu" zwischen "vor" und "pos" einhängen:
- vor->next = neu;
- neu->prev = vor;
- neu->next = pos;
- pos->prev = neu;
- }
-
- // Fertig, Zeiger auf neues Element zurückgeben:
- return neu;
- }
- else return NULL;
- }
-
- void AllesLoeschen(Liste &L)
- {
- Eintrag *p = L.anfang;
- while (p)
- {
- Eintrag *hilf = p;
- p=p->next;
- FreeVec(hilf);
- }
- /* end-while */
- Init(L);
- }
-
- void Loeschen(Liste &L, Eintrag *E)
- {
- // Vorgänger und Nachfolger des zu löschenden Elements
- Eintrag *vor = E->prev, *nach = E->next;
-
- if (vor)
- vor->next = nach;
- else
- L.anfang = nach;
-
- if (nach)
- nach->prev = vor;
- else
- L.ende = vor;
-
- FreeVec(E);
- }
-
- void AddName(struct List *list, UBYTE *name)
- {
- struct NameNode *namenode = AllocVec(sizeof(struct NameNode),MEMF_PUBLIC|MEMF_CLEAR);
- if (namenode)
- {
- strcpy(namenode->nn_Data,name);
- namenode->nn_Node.ln_Name = namenode->nn_Data;
- namenode->nn_Node.ln_Type = NAMENODE_ID;
- namenode->nn_Node.ln_Pri = 0;
- AddTail((struct List *)list,(struct Node *)namenode);
- }
- else PrintFault(ERROR_NO_FREE_STORE,"Achtung");
- }
-
- void FreeNameNodes(struct List *list)
- {
- struct NameNode *worknode;
- struct NameNode *nextnode;
-
- worknode = (struct NameNode *)(list->lh_Head); /* First node */
- while (nextnode = (struct NameNode *)(worknode->nn_Node.ln_Succ))
- {
- FreeVec(worknode);
- worknode = nextnode;
- }
- /* end-while */
- }
-