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)18 void 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)26 void createModelList(void) {
27 	modellist = malloc(sizeof(List));
28 	List_Init(modellist);
29 }
30 
freeModelList(void)31 void freeModelList(void) {
32 	List_Clear(modellist);
33 	free(modellist);
34 	modellist = NULL;
35 }
36 
addModel(s_model * model)37 void 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)45 void 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)56 s_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)65 s_model* getFirstModel(void) {
66 	assert(modellist);
67 	List_GotoFirst(modellist);
68 	return getCurrentModel();
69 
70 }
71 
getCurrentModel(void)72 s_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)81 s_model* getNextModel(void) {
82 	assert(modellist);
83 	if (List_GotoNext(modellist))
84 		return getCurrentModel();
85 	else return NULL;
86 }
87 
isLastModel(void)88 int isLastModel(void) {
89 	if (!modellist->current || modellist->current == modellist->last)
90 		return 1;
91 	return 0;
92 }
93