1 /* 2 * OpenBOR - http://www.LavaLit.com 3 * ----------------------------------------------------------------------- 4 * Licensed under the BSD license, see LICENSE in OpenBOR root for details. 5 * 6 * Copyright (c) 2004 - 2011 OpenBOR Team 7 */ 8 9 #include <string.h> 10 #include <assert.h> 11 #include "models.h" 12 #include "List.h" 13 #include "utils.h" 14 15 static List* modellist; 16 static char convertbuf[1024]; 17 makelowercp(char * name)18void makelowercp(char* name) { 19 assert(name); 20 size_t len = strlen(name); 21 assert(len < 1024); 22 strncpy(convertbuf, name, 1024); 23 lc(convertbuf, len); 24 } 25 createModelList(void)26void createModelList(void) { 27 modellist = malloc(sizeof(List)); 28 List_Init(modellist); 29 } 30 freeModelList(void)31void freeModelList(void) { 32 List_Clear(modellist); 33 free(modellist); 34 modellist = NULL; 35 } 36 addModel(s_model * model)37void addModel(s_model* model) { 38 assert(model); 39 assert(modellist); 40 makelowercp(model->name); 41 List_GotoLast(modellist); 42 List_InsertAfter(modellist, (void*) model, convertbuf); 43 } 44 deleteModel(char * modelname)45void deleteModel(char* modelname) { 46 s_model* temp; 47 assert(modellist); 48 assert(modelname); 49 makelowercp(modelname); 50 if(List_FindByName(modellist, convertbuf) && (temp=List_Retrieve(modellist))) { 51 List_Remove(modellist); 52 free(temp); 53 } 54 } 55 findmodel(char * modelname)56s_model* findmodel(char* modelname) { 57 s_model* temp = NULL; 58 assert(modellist); 59 makelowercp(modelname); 60 if(List_FindByName(modellist, convertbuf)) 61 temp=List_Retrieve(modellist); 62 return temp; 63 } 64 getFirstModel(void)65s_model* getFirstModel(void) { 66 assert(modellist); 67 List_GotoFirst(modellist); 68 return getCurrentModel(); 69 70 } 71 getCurrentModel(void)72s_model* getCurrentModel(void) { 73 assert(modellist); 74 Node* n = List_GetCurrentNode(modellist); 75 if(n) 76 return (s_model*) n->value; 77 else 78 return NULL; 79 } 80 getNextModel(void)81s_model* getNextModel(void) { 82 assert(modellist); 83 if (List_GotoNext(modellist)) 84 return getCurrentModel(); 85 else return NULL; 86 } 87 isLastModel(void)88int isLastModel(void) { 89 if (!modellist->current || modellist->current == modellist->last) 90 return 1; 91 return 0; 92 } 93