/*Uppgift 1 Josef Cotaidis*/ #include #include #include #include "list.h" #define LINE_MAX 256 typedef struct post{ struct post* next; char* data; int rownb; } Row; Row *first = NULL; Row *pointer = NULL; char *tmp; char line[LINE_MAX]; void load(FILE *f){ char* strbuff; int i = 0; while ((strbuff = fgets(line, LINE_MAX, f))){ i++; Row *new = malloc(sizeof(Row)); new->rownb = i*100; new->data = malloc(strlen(strbuff)+1); strcpy(new->data, strbuff); new->next = NULL; if (!first){ first = new; pointer = new; }else{ pointer->next= new; pointer = pointer->next; } } if (pointer){ pointer->data = realloc(pointer->data ,strlen(pointer->data)+2); if (!strchr(pointer->data, '\n')){ tmp = strchr(pointer->data, '\0'); *tmp = '\n'; *++tmp = '\0'; } } } void save(FILE *f){ pointer = first; while(pointer){ fprintf(f, "%s", pointer->data); pointer = pointer->next; } } int add_row(char *str, int rownb){ int flag = 1; Row *new = malloc(sizeof(Row)); new->rownb = rownb; new->data = malloc(strlen(str)+1); strcpy(new->data, str); new->next = NULL; if (!first){ first = new; } else if(!first->next){ if(new->rownb == first->rownb) flag = 0; else if (new->rownb < first->rownb){ new->next = first; first = new; } else{ first->next = new; } } else{ pointer = first; while(pointer->next && pointer->next->rownb <= rownb) pointer = pointer->next; if (pointer->rownb == rownb) flag = 0; else if(pointer->rownb > new->rownb){ new->next = pointer; first = new; } else{ new->next = pointer->next; pointer->next = new; } } if(flag == 0){ free(new->data); free(new); } return flag; } void print_all(void){ pointer = first; while(pointer){ printf("%-15d:%s", pointer->rownb, pointer->data); pointer = pointer->next; } } int print(int rownb){ int flag = 0; pointer = first; while(pointer && pointer->rownb < rownb) pointer = pointer->next; if (pointer && pointer->rownb == rownb){ printf("%-15d:%s", pointer->rownb, pointer->data); flag = 1; } return flag; } void renumber(void){ int counter = 0; pointer = first; while(pointer){ pointer->rownb = ++counter * 100; pointer = pointer->next; } } int delete(int rownb){ int flag = 1; pointer = first; Row* tmp; if (!pointer) flag = 0; else if(pointer->rownb == rownb){ first = pointer->next; free(pointer); } else{ while(pointer->next && pointer->next->rownb < rownb) pointer = pointer->next; if(pointer->next->rownb == rownb){ tmp = pointer->next; pointer->next = pointer->next->next; free(tmp->data); free(tmp); } else flag = 0; } return flag; }