From d552865da1203aeae7a7dd7b3edd789051e66580 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sun, 15 Jun 2014 14:56:09 +0100 Subject: Use search provider iterator. Use a List instead of an array as it is more flexible --- amiga/gui_options.c | 55 +++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) (limited to 'amiga/gui_options.c') diff --git a/amiga/gui_options.c b/amiga/gui_options.c index 3a6451b97..141de2fcd 100755 --- a/amiga/gui_options.c +++ b/amiga/gui_options.c @@ -216,10 +216,10 @@ CONST_STRPTR nativebmopts[OPTS_MAX_NATIVEBM]; CONST_STRPTR ditheropts[OPTS_MAX_DITHER]; CONST_STRPTR fontopts[6]; CONST_STRPTR gadlab[OPTS_LAST]; -STRPTR *websearch_list; +struct List *websearch_list; -STRPTR *ami_gui_opts_websearch(void); -void ami_gui_opts_websearch_free(STRPTR *websearchlist); +struct List *ami_gui_opts_websearch(void); +void ami_gui_opts_websearch_free(struct List *websearchlist); void ami_gui_opts_setup(void) { @@ -1312,7 +1312,7 @@ void ami_gui_opts_open(void) GA_ID, GID_OPTS_SEARCH_PROV, GA_RelVerify, TRUE, CHOOSER_PopUp, TRUE, - CHOOSER_LabelArray, websearch_list, + CHOOSER_Labels, websearch_list, CHOOSER_Selected, nsoption_int(search_provider), CHOOSER_MaxLabels, 40, ChooserEnd, @@ -2118,39 +2118,40 @@ BOOL ami_gui_opts_event(void) return FALSE; } -STRPTR *ami_gui_opts_websearch(void) +struct List *ami_gui_opts_websearch(void) { - char buf[300]; - ULONG ref = 0; - STRPTR *websearchlist; + struct List *list; + struct Node *node; + const char *name; + int iter; - websearchlist = AllocVecTagList(200, NULL); /* NB: Was not MEMF_PRIVATE */ + list = AllocVecTagList(sizeof(struct List), NULL); + NewList(list); - if (nsoption_charp(search_engines_file) == NULL) return websearchlist; + if (nsoption_charp(search_engines_file) == NULL) return list; - FILE *f = fopen(nsoption_charp(search_engines_file), "r"); - if (f == NULL) return websearchlist; - - while (fgets(buf, sizeof(buf), f) != NULL) { - if (buf[0] == '\0') continue; - buf[strlen(buf)-1] = '\0'; - websearchlist[ref] = strdup(strtok(buf, "|")); - ref++; + for (iter = search_web_iterate_providers(0, &name); + iter != -1; + iter = search_web_iterate_providers(iter, &name)) { + node = AllocChooserNode(CNA_Text, name, TAG_DONE); + AddTail(list, node); } - fclose(f); - websearchlist[ref] = NULL; - return websearchlist; + return list; } -void ami_gui_opts_websearch_free(STRPTR *websearchlist) +void ami_gui_opts_websearch_free(struct List *websearchlist) { - ULONG ref = 0; + struct Node *node; + struct Node *nnode; - while (websearchlist[ref] != NULL) { - free(websearchlist[ref]); - ref++; - } + if(IsListEmpty(websearchlist)) return; + node = GetHead(websearchlist); + + do { + nnode = GetSucc(node); + Remove(node); + } while(node = nnode); FreeVec(websearchlist); } -- cgit v1.2.3