#ifndef SOURCE_H_ #define SOURCE_H_ #include <stdio.h> #include <malloc.h>

typedef struct sourceHnode sourceHnode; typedef sourceHnode *sourceHptr;

typedef struct{

int number; sourceHptr hNode;

}sourceNode;

typedef sourceNode *sourcePtr; struct sourceHnode{

sourceHptr next, prev; sourcePtr src;

};

#endif /*SOURCE_H_*/ #include "source.h"

sourceHptr newSourceHptr(sourcePtr src); sourceHptr sourceHlistNodeAdd (sourceHptr head, sourcePtr src); sourceHptr sourceHlistNodeRem (sourceHptr head, sourcePtr src); sourceHptr sourceHlistNodeUp (sourceHptr head, sourcePtr src); sourceHptr sourceHlistNodeDn (sourceHptr head, sourcePtr src);

sourceHptr newSourceHptr(sourcePtr src) {

sourceHptr newSrcHptr = calloc(1, sizeof(sourceHnode)); newSrcHptr->src = src; src->hNode = newSrcHptr; return newSrcHptr;

}

sourceHptr sourceHlistNodeAdd (sourceHptr head, sourcePtr src) {

sourceHptr next = newSourceHptr(src); sourceHptr i = head; if(i) { for(i; i->next; i = i->next); i->next = next; next->prev = i; } else head = next; return head;

}

sourceHptr sourceHlistNodeRem (sourceHptr head, sourcePtr src) {

sourceHptr i = src->hNode; if(i) { if(i->prev) i->prev->next = i->next; if(i->next) i->next->prev = i->prev; if(head == i) head = i->next; free(i); } return head;

}

sourceHptr sourceHlistNodeUp (sourceHptr head, sourcePtr src) {

sourceHptr i = src->hNode; if(i) { if(i->next && i->prev) i->next->prev = i->prev; if(i->prev) { sourceHptr temp = i->prev->prev; i->prev->prev = i; i->prev->next = i->next; if(i->prev == head) head = i; i->next = i->prev; i->prev = temp; if(i->prev) i->prev->next = i; } } return head;

}

sourceHptr sourceHlistNodeDn (sourceHptr head, sourcePtr src) {

sourceHptr i = src->hNode; if(i) { if(i->prev && i->next) i->prev->next = i->next; if(i->next) { sourceHptr temp = i->next->next; i->next->next = i; i->next->prev = i->prev; i->prev = i->next; i->next = temp; if(i->next) i->next->prev = i; } if(i == head) head = i->prev; } return head;

}