/* * ========================================================================= */ am_sl_t * calc_load_file( char * filename) { char pattern[1025]; am_sl_t *sl_list; FILE *file = fopen(filename, "r"); if (!file) { return NULL; } sl_list = new_sl(); while(fgets(pattern, 1025, file)) { if(strlen(pattern)>0 && pattern[strlen(pattern)-1] == '\n') pattern[strlen(pattern)-1] = '\0'; sl_list = append_sl(sl_list, pattern); } fclose(file); return sl_list; }
am_sl_t * insert_sort_sl( am_sl_t * sl, char * name) { sle_t *a, *b; if(!sl) { sl = new_sl(); } for(b=sl->first; b != NULL; b=b->next) { int i = strcmp(b->name, name); if(i==0) return(sl); /* already there, no need to insert */ if(i>0) break; } if(b == sl->first) return insert_sl(sl, name); if(b == NULL) return append_sl(sl, name); a = g_malloc(sizeof(sle_t)); a->name = g_strdup(name); /* insert before b */ a->next = b; a->prev = b->prev; b->prev->next = a; b->prev = a; sl->nb_element++; return(sl); }
am_sl_t * append_sl( am_sl_t * sl, char * name) { sle_t *a; if(!sl) { sl = new_sl(); } a = g_malloc(sizeof(sle_t)); a->name = g_strdup(name); a->prev = sl->last; a->next = NULL; if(a->prev) a->prev->next = a; else sl->first = a; sl->last = a; sl->nb_element++; return(sl); }