1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino * Copyright (c)2004 Cat's Eye Technologies. All rights reserved.
3*86d7f5d3SJohn Marino *
4*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without
5*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions
6*86d7f5d3SJohn Marino * are met:
7*86d7f5d3SJohn Marino *
8*86d7f5d3SJohn Marino * Redistributions of source code must retain the above copyright
9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer.
10*86d7f5d3SJohn Marino *
11*86d7f5d3SJohn Marino * Redistributions in binary form must reproduce the above copyright
12*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in
13*86d7f5d3SJohn Marino * the documentation and/or other materials provided with the
14*86d7f5d3SJohn Marino * distribution.
15*86d7f5d3SJohn Marino *
16*86d7f5d3SJohn Marino * Neither the name of Cat's Eye Technologies nor the names of its
17*86d7f5d3SJohn Marino * contributors may be used to endorse or promote products derived
18*86d7f5d3SJohn Marino * from this software without specific prior written permission.
19*86d7f5d3SJohn Marino *
20*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21*86d7f5d3SJohn Marino * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*86d7f5d3SJohn Marino * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*86d7f5d3SJohn Marino * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24*86d7f5d3SJohn Marino * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25*86d7f5d3SJohn Marino * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26*86d7f5d3SJohn Marino * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27*86d7f5d3SJohn Marino * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29*86d7f5d3SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*86d7f5d3SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31*86d7f5d3SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE.
32*86d7f5d3SJohn Marino */
33*86d7f5d3SJohn Marino
34*86d7f5d3SJohn Marino /*
35*86d7f5d3SJohn Marino * form.c
36*86d7f5d3SJohn Marino * $Id: form.c,v 1.18 2005/03/04 21:26:20 cpressey Exp $
37*86d7f5d3SJohn Marino */
38*86d7f5d3SJohn Marino
39*86d7f5d3SJohn Marino #include <stdarg.h>
40*86d7f5d3SJohn Marino #include <stdlib.h>
41*86d7f5d3SJohn Marino #include <string.h>
42*86d7f5d3SJohn Marino
43*86d7f5d3SJohn Marino #include <libaura/mem.h>
44*86d7f5d3SJohn Marino
45*86d7f5d3SJohn Marino #define NEEDS_DFUI_STRUCTURE_DEFINITIONS
46*86d7f5d3SJohn Marino #include "dfui.h"
47*86d7f5d3SJohn Marino #undef NEEDS_DFUI_STRUCTURE_DEFINITIONS
48*86d7f5d3SJohn Marino #include "dump.h"
49*86d7f5d3SJohn Marino
50*86d7f5d3SJohn Marino /*** INFOS ***/
51*86d7f5d3SJohn Marino
52*86d7f5d3SJohn Marino struct dfui_info *
dfui_info_new(const char * name,const char * short_desc,const char * long_desc)53*86d7f5d3SJohn Marino dfui_info_new(const char *name, const char *short_desc, const char *long_desc)
54*86d7f5d3SJohn Marino {
55*86d7f5d3SJohn Marino struct dfui_info *i;
56*86d7f5d3SJohn Marino
57*86d7f5d3SJohn Marino AURA_MALLOC(i, dfui_info);
58*86d7f5d3SJohn Marino i->name = aura_strdup(name);
59*86d7f5d3SJohn Marino i->short_desc = aura_strdup(short_desc);
60*86d7f5d3SJohn Marino i->long_desc = aura_strdup(long_desc);
61*86d7f5d3SJohn Marino
62*86d7f5d3SJohn Marino return(i);
63*86d7f5d3SJohn Marino }
64*86d7f5d3SJohn Marino
65*86d7f5d3SJohn Marino void
dfui_info_free(struct dfui_info * i)66*86d7f5d3SJohn Marino dfui_info_free(struct dfui_info *i)
67*86d7f5d3SJohn Marino {
68*86d7f5d3SJohn Marino free(i->name);
69*86d7f5d3SJohn Marino free(i->short_desc);
70*86d7f5d3SJohn Marino free(i->long_desc);
71*86d7f5d3SJohn Marino AURA_FREE(i, dfui_info);
72*86d7f5d3SJohn Marino }
73*86d7f5d3SJohn Marino
74*86d7f5d3SJohn Marino const char *
dfui_info_get_name(const struct dfui_info * i)75*86d7f5d3SJohn Marino dfui_info_get_name(const struct dfui_info *i)
76*86d7f5d3SJohn Marino {
77*86d7f5d3SJohn Marino if (i == NULL)
78*86d7f5d3SJohn Marino return("");
79*86d7f5d3SJohn Marino return(i->name);
80*86d7f5d3SJohn Marino }
81*86d7f5d3SJohn Marino
82*86d7f5d3SJohn Marino const char *
dfui_info_get_short_desc(const struct dfui_info * i)83*86d7f5d3SJohn Marino dfui_info_get_short_desc(const struct dfui_info *i)
84*86d7f5d3SJohn Marino {
85*86d7f5d3SJohn Marino if (i == NULL)
86*86d7f5d3SJohn Marino return("");
87*86d7f5d3SJohn Marino return(i->short_desc);
88*86d7f5d3SJohn Marino }
89*86d7f5d3SJohn Marino
90*86d7f5d3SJohn Marino const char *
dfui_info_get_long_desc(const struct dfui_info * i)91*86d7f5d3SJohn Marino dfui_info_get_long_desc(const struct dfui_info *i)
92*86d7f5d3SJohn Marino {
93*86d7f5d3SJohn Marino if (i == NULL)
94*86d7f5d3SJohn Marino return("");
95*86d7f5d3SJohn Marino return(i->long_desc);
96*86d7f5d3SJohn Marino }
97*86d7f5d3SJohn Marino
98*86d7f5d3SJohn Marino void
dfui_info_set_name(struct dfui_info * i,const char * name)99*86d7f5d3SJohn Marino dfui_info_set_name(struct dfui_info *i, const char *name)
100*86d7f5d3SJohn Marino {
101*86d7f5d3SJohn Marino if (i == NULL)
102*86d7f5d3SJohn Marino return;
103*86d7f5d3SJohn Marino if (i->name != NULL)
104*86d7f5d3SJohn Marino free(i->name);
105*86d7f5d3SJohn Marino i->name = aura_strdup(name);
106*86d7f5d3SJohn Marino }
107*86d7f5d3SJohn Marino
108*86d7f5d3SJohn Marino void
dfui_info_set_short_desc(struct dfui_info * i,const char * short_desc)109*86d7f5d3SJohn Marino dfui_info_set_short_desc(struct dfui_info *i, const char *short_desc)
110*86d7f5d3SJohn Marino {
111*86d7f5d3SJohn Marino if (i == NULL)
112*86d7f5d3SJohn Marino return;
113*86d7f5d3SJohn Marino if (i->short_desc != NULL)
114*86d7f5d3SJohn Marino free(i->short_desc);
115*86d7f5d3SJohn Marino i->short_desc = aura_strdup(short_desc);
116*86d7f5d3SJohn Marino }
117*86d7f5d3SJohn Marino
118*86d7f5d3SJohn Marino void
dfui_info_set_long_desc(struct dfui_info * i,const char * long_desc)119*86d7f5d3SJohn Marino dfui_info_set_long_desc(struct dfui_info *i, const char *long_desc)
120*86d7f5d3SJohn Marino {
121*86d7f5d3SJohn Marino if (i == NULL)
122*86d7f5d3SJohn Marino return;
123*86d7f5d3SJohn Marino if (i->long_desc != NULL)
124*86d7f5d3SJohn Marino free(i->long_desc);
125*86d7f5d3SJohn Marino i->long_desc = aura_strdup(long_desc);
126*86d7f5d3SJohn Marino }
127*86d7f5d3SJohn Marino
128*86d7f5d3SJohn Marino /*** PROPERTIES ***/
129*86d7f5d3SJohn Marino
130*86d7f5d3SJohn Marino struct dfui_property *
dfui_property_new(const char * name,const char * value)131*86d7f5d3SJohn Marino dfui_property_new(const char *name, const char *value)
132*86d7f5d3SJohn Marino {
133*86d7f5d3SJohn Marino struct dfui_property *p;
134*86d7f5d3SJohn Marino
135*86d7f5d3SJohn Marino AURA_MALLOC(p, dfui_property);
136*86d7f5d3SJohn Marino p->name = aura_strdup(name);
137*86d7f5d3SJohn Marino p->value = aura_strdup(value);
138*86d7f5d3SJohn Marino
139*86d7f5d3SJohn Marino return(p);
140*86d7f5d3SJohn Marino }
141*86d7f5d3SJohn Marino
142*86d7f5d3SJohn Marino void
dfui_property_free(struct dfui_property * p)143*86d7f5d3SJohn Marino dfui_property_free(struct dfui_property *p)
144*86d7f5d3SJohn Marino {
145*86d7f5d3SJohn Marino if (p == NULL)
146*86d7f5d3SJohn Marino return;
147*86d7f5d3SJohn Marino free(p->name);
148*86d7f5d3SJohn Marino free(p->value);
149*86d7f5d3SJohn Marino AURA_FREE(p, dfui_property);
150*86d7f5d3SJohn Marino }
151*86d7f5d3SJohn Marino
152*86d7f5d3SJohn Marino void
dfui_properties_free(struct dfui_property * head)153*86d7f5d3SJohn Marino dfui_properties_free(struct dfui_property *head)
154*86d7f5d3SJohn Marino {
155*86d7f5d3SJohn Marino struct dfui_property *p;
156*86d7f5d3SJohn Marino
157*86d7f5d3SJohn Marino for (p = head; p != NULL; ) {
158*86d7f5d3SJohn Marino head = p->next;
159*86d7f5d3SJohn Marino dfui_property_free(p);
160*86d7f5d3SJohn Marino p = head;
161*86d7f5d3SJohn Marino }
162*86d7f5d3SJohn Marino }
163*86d7f5d3SJohn Marino
164*86d7f5d3SJohn Marino struct dfui_property *
dfui_property_find(struct dfui_property * head,const char * name)165*86d7f5d3SJohn Marino dfui_property_find(struct dfui_property *head, const char *name)
166*86d7f5d3SJohn Marino {
167*86d7f5d3SJohn Marino struct dfui_property *p;
168*86d7f5d3SJohn Marino
169*86d7f5d3SJohn Marino for (p = head; p != NULL; p = p->next) {
170*86d7f5d3SJohn Marino if (strcmp(name, p->name) == 0)
171*86d7f5d3SJohn Marino return(p);
172*86d7f5d3SJohn Marino }
173*86d7f5d3SJohn Marino
174*86d7f5d3SJohn Marino return(NULL);
175*86d7f5d3SJohn Marino }
176*86d7f5d3SJohn Marino
177*86d7f5d3SJohn Marino const char *
dfui_property_get(struct dfui_property * head,const char * name)178*86d7f5d3SJohn Marino dfui_property_get(struct dfui_property *head, const char *name)
179*86d7f5d3SJohn Marino {
180*86d7f5d3SJohn Marino struct dfui_property *p;
181*86d7f5d3SJohn Marino
182*86d7f5d3SJohn Marino if ((p = dfui_property_find(head, name)) != NULL)
183*86d7f5d3SJohn Marino return(p->value);
184*86d7f5d3SJohn Marino return("");
185*86d7f5d3SJohn Marino }
186*86d7f5d3SJohn Marino
187*86d7f5d3SJohn Marino struct dfui_property *
dfui_property_set(struct dfui_property ** head,const char * name,const char * value)188*86d7f5d3SJohn Marino dfui_property_set(struct dfui_property **head, const char *name, const char *value)
189*86d7f5d3SJohn Marino {
190*86d7f5d3SJohn Marino struct dfui_property *p;
191*86d7f5d3SJohn Marino
192*86d7f5d3SJohn Marino if (head == NULL)
193*86d7f5d3SJohn Marino return(NULL);
194*86d7f5d3SJohn Marino
195*86d7f5d3SJohn Marino if ((p = dfui_property_find(*head, name)) != NULL) {
196*86d7f5d3SJohn Marino free(p->value);
197*86d7f5d3SJohn Marino p->value = aura_strdup(value);
198*86d7f5d3SJohn Marino return(p);
199*86d7f5d3SJohn Marino }
200*86d7f5d3SJohn Marino
201*86d7f5d3SJohn Marino p = dfui_property_new(name, value);
202*86d7f5d3SJohn Marino p->next = *head;
203*86d7f5d3SJohn Marino *head = p;
204*86d7f5d3SJohn Marino
205*86d7f5d3SJohn Marino return(p);
206*86d7f5d3SJohn Marino }
207*86d7f5d3SJohn Marino
208*86d7f5d3SJohn Marino const char *
dfui_property_get_name(const struct dfui_property * p)209*86d7f5d3SJohn Marino dfui_property_get_name(const struct dfui_property *p)
210*86d7f5d3SJohn Marino {
211*86d7f5d3SJohn Marino return(p->name);
212*86d7f5d3SJohn Marino }
213*86d7f5d3SJohn Marino
214*86d7f5d3SJohn Marino const char *
dfui_property_get_value(const struct dfui_property * p)215*86d7f5d3SJohn Marino dfui_property_get_value(const struct dfui_property *p)
216*86d7f5d3SJohn Marino {
217*86d7f5d3SJohn Marino return(p->value);
218*86d7f5d3SJohn Marino }
219*86d7f5d3SJohn Marino
220*86d7f5d3SJohn Marino /*** FIELDS ***/
221*86d7f5d3SJohn Marino
222*86d7f5d3SJohn Marino struct dfui_field *
dfui_field_new(const char * id,struct dfui_info * info)223*86d7f5d3SJohn Marino dfui_field_new(const char *id, struct dfui_info *info)
224*86d7f5d3SJohn Marino {
225*86d7f5d3SJohn Marino struct dfui_field *fi;
226*86d7f5d3SJohn Marino
227*86d7f5d3SJohn Marino AURA_MALLOC(fi, dfui_field);
228*86d7f5d3SJohn Marino fi->id = aura_strdup(id);
229*86d7f5d3SJohn Marino fi->info = info;
230*86d7f5d3SJohn Marino fi->option_head = NULL;
231*86d7f5d3SJohn Marino fi->property_head = NULL;
232*86d7f5d3SJohn Marino fi->next = NULL;
233*86d7f5d3SJohn Marino
234*86d7f5d3SJohn Marino dfui_field_property_set(fi, "editable", "true");
235*86d7f5d3SJohn Marino
236*86d7f5d3SJohn Marino return(fi);
237*86d7f5d3SJohn Marino }
238*86d7f5d3SJohn Marino
239*86d7f5d3SJohn Marino void
dfui_field_free(struct dfui_field * fi)240*86d7f5d3SJohn Marino dfui_field_free(struct dfui_field *fi)
241*86d7f5d3SJohn Marino {
242*86d7f5d3SJohn Marino free(fi->id);
243*86d7f5d3SJohn Marino dfui_info_free(fi->info);
244*86d7f5d3SJohn Marino dfui_options_free(fi->option_head);
245*86d7f5d3SJohn Marino dfui_properties_free(fi->property_head);
246*86d7f5d3SJohn Marino AURA_FREE(fi, dfui_field);
247*86d7f5d3SJohn Marino }
248*86d7f5d3SJohn Marino
249*86d7f5d3SJohn Marino void
dfui_fields_free(struct dfui_field * head)250*86d7f5d3SJohn Marino dfui_fields_free(struct dfui_field *head)
251*86d7f5d3SJohn Marino {
252*86d7f5d3SJohn Marino struct dfui_field *fi;
253*86d7f5d3SJohn Marino
254*86d7f5d3SJohn Marino fi = head;
255*86d7f5d3SJohn Marino while (fi != NULL) {
256*86d7f5d3SJohn Marino head = fi->next;
257*86d7f5d3SJohn Marino dfui_field_free(fi);
258*86d7f5d3SJohn Marino fi = head;
259*86d7f5d3SJohn Marino }
260*86d7f5d3SJohn Marino }
261*86d7f5d3SJohn Marino
262*86d7f5d3SJohn Marino struct dfui_field *
dfui_field_get_next(const struct dfui_field * fi)263*86d7f5d3SJohn Marino dfui_field_get_next(const struct dfui_field *fi)
264*86d7f5d3SJohn Marino {
265*86d7f5d3SJohn Marino if (fi == NULL)
266*86d7f5d3SJohn Marino return(NULL);
267*86d7f5d3SJohn Marino return(fi->next);
268*86d7f5d3SJohn Marino }
269*86d7f5d3SJohn Marino
270*86d7f5d3SJohn Marino const char *
dfui_field_get_id(const struct dfui_field * fi)271*86d7f5d3SJohn Marino dfui_field_get_id(const struct dfui_field *fi)
272*86d7f5d3SJohn Marino {
273*86d7f5d3SJohn Marino if (fi == NULL)
274*86d7f5d3SJohn Marino return(NULL);
275*86d7f5d3SJohn Marino return(fi->id);
276*86d7f5d3SJohn Marino }
277*86d7f5d3SJohn Marino
278*86d7f5d3SJohn Marino struct dfui_info *
dfui_field_get_info(const struct dfui_field * fi)279*86d7f5d3SJohn Marino dfui_field_get_info(const struct dfui_field *fi)
280*86d7f5d3SJohn Marino {
281*86d7f5d3SJohn Marino if (fi == NULL)
282*86d7f5d3SJohn Marino return(NULL);
283*86d7f5d3SJohn Marino return(fi->info);
284*86d7f5d3SJohn Marino }
285*86d7f5d3SJohn Marino
286*86d7f5d3SJohn Marino struct dfui_option *
dfui_field_option_add(struct dfui_field * fi,const char * value)287*86d7f5d3SJohn Marino dfui_field_option_add(struct dfui_field *fi, const char *value)
288*86d7f5d3SJohn Marino {
289*86d7f5d3SJohn Marino struct dfui_option *o;
290*86d7f5d3SJohn Marino
291*86d7f5d3SJohn Marino if (fi == NULL)
292*86d7f5d3SJohn Marino return(NULL);
293*86d7f5d3SJohn Marino o = dfui_option_new(value);
294*86d7f5d3SJohn Marino o->next = fi->option_head;
295*86d7f5d3SJohn Marino fi->option_head = o;
296*86d7f5d3SJohn Marino
297*86d7f5d3SJohn Marino return(o);
298*86d7f5d3SJohn Marino }
299*86d7f5d3SJohn Marino
300*86d7f5d3SJohn Marino struct dfui_option *
dfui_field_option_get_first(const struct dfui_field * fi)301*86d7f5d3SJohn Marino dfui_field_option_get_first(const struct dfui_field *fi)
302*86d7f5d3SJohn Marino {
303*86d7f5d3SJohn Marino if (fi == NULL)
304*86d7f5d3SJohn Marino return(NULL);
305*86d7f5d3SJohn Marino return(fi->option_head);
306*86d7f5d3SJohn Marino }
307*86d7f5d3SJohn Marino
308*86d7f5d3SJohn Marino struct dfui_property *
dfui_field_property_set(struct dfui_field * fi,const char * name,const char * value)309*86d7f5d3SJohn Marino dfui_field_property_set(struct dfui_field *fi, const char *name, const char *value)
310*86d7f5d3SJohn Marino {
311*86d7f5d3SJohn Marino return(dfui_property_set(&fi->property_head, name, value));
312*86d7f5d3SJohn Marino }
313*86d7f5d3SJohn Marino
314*86d7f5d3SJohn Marino const char *
dfui_field_property_get(const struct dfui_field * fi,const char * name)315*86d7f5d3SJohn Marino dfui_field_property_get(const struct dfui_field *fi, const char *name)
316*86d7f5d3SJohn Marino {
317*86d7f5d3SJohn Marino return(dfui_property_get(fi->property_head, name));
318*86d7f5d3SJohn Marino }
319*86d7f5d3SJohn Marino
320*86d7f5d3SJohn Marino int
dfui_field_property_is(const struct dfui_field * fi,const char * name,const char * value)321*86d7f5d3SJohn Marino dfui_field_property_is(const struct dfui_field *fi, const char *name, const char *value)
322*86d7f5d3SJohn Marino {
323*86d7f5d3SJohn Marino struct dfui_property *h;
324*86d7f5d3SJohn Marino
325*86d7f5d3SJohn Marino if (fi == NULL)
326*86d7f5d3SJohn Marino return(0);
327*86d7f5d3SJohn Marino if ((h = dfui_property_find(fi->property_head, name)) == NULL)
328*86d7f5d3SJohn Marino return(0);
329*86d7f5d3SJohn Marino return(!strcmp(h->value, value));
330*86d7f5d3SJohn Marino }
331*86d7f5d3SJohn Marino
332*86d7f5d3SJohn Marino /*** OPTIONS ***/
333*86d7f5d3SJohn Marino
334*86d7f5d3SJohn Marino struct dfui_option *
dfui_option_new(const char * value)335*86d7f5d3SJohn Marino dfui_option_new(const char *value)
336*86d7f5d3SJohn Marino {
337*86d7f5d3SJohn Marino struct dfui_option *o;
338*86d7f5d3SJohn Marino
339*86d7f5d3SJohn Marino AURA_MALLOC(o, dfui_option);
340*86d7f5d3SJohn Marino o->value = aura_strdup(value);
341*86d7f5d3SJohn Marino o->next = NULL;
342*86d7f5d3SJohn Marino
343*86d7f5d3SJohn Marino return(o);
344*86d7f5d3SJohn Marino }
345*86d7f5d3SJohn Marino
346*86d7f5d3SJohn Marino void
dfui_option_free(struct dfui_option * o)347*86d7f5d3SJohn Marino dfui_option_free(struct dfui_option *o)
348*86d7f5d3SJohn Marino {
349*86d7f5d3SJohn Marino if (o == NULL)
350*86d7f5d3SJohn Marino return;
351*86d7f5d3SJohn Marino free(o->value);
352*86d7f5d3SJohn Marino AURA_FREE(o, dfui_option);
353*86d7f5d3SJohn Marino }
354*86d7f5d3SJohn Marino
355*86d7f5d3SJohn Marino void
dfui_options_free(struct dfui_option * head)356*86d7f5d3SJohn Marino dfui_options_free(struct dfui_option *head)
357*86d7f5d3SJohn Marino {
358*86d7f5d3SJohn Marino struct dfui_option *o;
359*86d7f5d3SJohn Marino
360*86d7f5d3SJohn Marino o = head;
361*86d7f5d3SJohn Marino while (o != NULL) {
362*86d7f5d3SJohn Marino head = o->next;
363*86d7f5d3SJohn Marino dfui_option_free(o);
364*86d7f5d3SJohn Marino o = head;
365*86d7f5d3SJohn Marino }
366*86d7f5d3SJohn Marino }
367*86d7f5d3SJohn Marino
368*86d7f5d3SJohn Marino struct dfui_option *
dfui_option_get_next(const struct dfui_option * o)369*86d7f5d3SJohn Marino dfui_option_get_next(const struct dfui_option *o)
370*86d7f5d3SJohn Marino {
371*86d7f5d3SJohn Marino if (o == NULL)
372*86d7f5d3SJohn Marino return(NULL);
373*86d7f5d3SJohn Marino return(o->next);
374*86d7f5d3SJohn Marino }
375*86d7f5d3SJohn Marino
376*86d7f5d3SJohn Marino const char *
dfui_option_get_value(const struct dfui_option * o)377*86d7f5d3SJohn Marino dfui_option_get_value(const struct dfui_option *o)
378*86d7f5d3SJohn Marino {
379*86d7f5d3SJohn Marino if (o == NULL)
380*86d7f5d3SJohn Marino return("");
381*86d7f5d3SJohn Marino return(o->value);
382*86d7f5d3SJohn Marino }
383*86d7f5d3SJohn Marino
384*86d7f5d3SJohn Marino /*** ACTIONS ***/
385*86d7f5d3SJohn Marino
386*86d7f5d3SJohn Marino struct dfui_action *
dfui_action_new(const char * id,struct dfui_info * info)387*86d7f5d3SJohn Marino dfui_action_new(const char *id, struct dfui_info *info)
388*86d7f5d3SJohn Marino {
389*86d7f5d3SJohn Marino struct dfui_action *a;
390*86d7f5d3SJohn Marino
391*86d7f5d3SJohn Marino AURA_MALLOC(a, dfui_action);
392*86d7f5d3SJohn Marino a->id = aura_strdup(id);
393*86d7f5d3SJohn Marino a->info = info;
394*86d7f5d3SJohn Marino a->next = NULL;
395*86d7f5d3SJohn Marino a->property_head = NULL;
396*86d7f5d3SJohn Marino
397*86d7f5d3SJohn Marino return(a);
398*86d7f5d3SJohn Marino }
399*86d7f5d3SJohn Marino
400*86d7f5d3SJohn Marino void
dfui_action_free(struct dfui_action * a)401*86d7f5d3SJohn Marino dfui_action_free(struct dfui_action *a)
402*86d7f5d3SJohn Marino {
403*86d7f5d3SJohn Marino free(a->id);
404*86d7f5d3SJohn Marino dfui_info_free(a->info);
405*86d7f5d3SJohn Marino dfui_properties_free(a->property_head);
406*86d7f5d3SJohn Marino AURA_FREE(a, dfui_action);
407*86d7f5d3SJohn Marino }
408*86d7f5d3SJohn Marino
409*86d7f5d3SJohn Marino void
dfui_actions_free(struct dfui_action * head)410*86d7f5d3SJohn Marino dfui_actions_free(struct dfui_action *head)
411*86d7f5d3SJohn Marino {
412*86d7f5d3SJohn Marino struct dfui_action *a;
413*86d7f5d3SJohn Marino
414*86d7f5d3SJohn Marino a = head;
415*86d7f5d3SJohn Marino while (a != NULL) {
416*86d7f5d3SJohn Marino head = a->next;
417*86d7f5d3SJohn Marino dfui_action_free(a);
418*86d7f5d3SJohn Marino a = head;
419*86d7f5d3SJohn Marino }
420*86d7f5d3SJohn Marino }
421*86d7f5d3SJohn Marino
422*86d7f5d3SJohn Marino struct dfui_action *
dfui_action_get_next(const struct dfui_action * a)423*86d7f5d3SJohn Marino dfui_action_get_next(const struct dfui_action *a)
424*86d7f5d3SJohn Marino {
425*86d7f5d3SJohn Marino if (a == NULL)
426*86d7f5d3SJohn Marino return(NULL);
427*86d7f5d3SJohn Marino return(a->next);
428*86d7f5d3SJohn Marino }
429*86d7f5d3SJohn Marino
430*86d7f5d3SJohn Marino const char *
dfui_action_get_id(const struct dfui_action * a)431*86d7f5d3SJohn Marino dfui_action_get_id(const struct dfui_action *a)
432*86d7f5d3SJohn Marino {
433*86d7f5d3SJohn Marino if (a == NULL)
434*86d7f5d3SJohn Marino return(NULL);
435*86d7f5d3SJohn Marino return(a->id);
436*86d7f5d3SJohn Marino }
437*86d7f5d3SJohn Marino
438*86d7f5d3SJohn Marino struct dfui_info *
dfui_action_get_info(const struct dfui_action * a)439*86d7f5d3SJohn Marino dfui_action_get_info(const struct dfui_action *a)
440*86d7f5d3SJohn Marino {
441*86d7f5d3SJohn Marino if (a == NULL)
442*86d7f5d3SJohn Marino return(NULL);
443*86d7f5d3SJohn Marino return(a->info);
444*86d7f5d3SJohn Marino }
445*86d7f5d3SJohn Marino
446*86d7f5d3SJohn Marino struct dfui_property *
dfui_action_property_set(struct dfui_action * a,const char * name,const char * value)447*86d7f5d3SJohn Marino dfui_action_property_set(struct dfui_action *a, const char *name, const char *value)
448*86d7f5d3SJohn Marino {
449*86d7f5d3SJohn Marino return(dfui_property_set(&a->property_head, name, value));
450*86d7f5d3SJohn Marino }
451*86d7f5d3SJohn Marino
452*86d7f5d3SJohn Marino const char *
dfui_action_property_get(const struct dfui_action * a,const char * name)453*86d7f5d3SJohn Marino dfui_action_property_get(const struct dfui_action *a, const char *name)
454*86d7f5d3SJohn Marino {
455*86d7f5d3SJohn Marino return(dfui_property_get(a->property_head, name));
456*86d7f5d3SJohn Marino }
457*86d7f5d3SJohn Marino
458*86d7f5d3SJohn Marino int
dfui_action_property_is(const struct dfui_action * a,const char * name,const char * value)459*86d7f5d3SJohn Marino dfui_action_property_is(const struct dfui_action *a, const char *name, const char *value)
460*86d7f5d3SJohn Marino {
461*86d7f5d3SJohn Marino struct dfui_property *h;
462*86d7f5d3SJohn Marino
463*86d7f5d3SJohn Marino if (a == NULL)
464*86d7f5d3SJohn Marino return(0);
465*86d7f5d3SJohn Marino if ((h = dfui_property_find(a->property_head, name)) == NULL)
466*86d7f5d3SJohn Marino return(0);
467*86d7f5d3SJohn Marino return(!strcmp(h->value, value));
468*86d7f5d3SJohn Marino }
469*86d7f5d3SJohn Marino
470*86d7f5d3SJohn Marino /*** FORMS ***/
471*86d7f5d3SJohn Marino
472*86d7f5d3SJohn Marino struct dfui_form *
dfui_form_new(const char * id,struct dfui_info * info)473*86d7f5d3SJohn Marino dfui_form_new(const char *id, struct dfui_info *info)
474*86d7f5d3SJohn Marino {
475*86d7f5d3SJohn Marino struct dfui_form *f;
476*86d7f5d3SJohn Marino
477*86d7f5d3SJohn Marino AURA_MALLOC(f, dfui_form);
478*86d7f5d3SJohn Marino f->id = aura_strdup(id);
479*86d7f5d3SJohn Marino f->info = info;
480*86d7f5d3SJohn Marino f->multiple = 0;
481*86d7f5d3SJohn Marino f->extensible = 0;
482*86d7f5d3SJohn Marino f->field_head = NULL;
483*86d7f5d3SJohn Marino f->action_head = NULL;
484*86d7f5d3SJohn Marino f->dataset_head = NULL;
485*86d7f5d3SJohn Marino f->property_head = NULL;
486*86d7f5d3SJohn Marino
487*86d7f5d3SJohn Marino return(f);
488*86d7f5d3SJohn Marino };
489*86d7f5d3SJohn Marino
490*86d7f5d3SJohn Marino /*
491*86d7f5d3SJohn Marino * Convenience function for creating a form.
492*86d7f5d3SJohn Marino * This function takes a list of any number of strings.
493*86d7f5d3SJohn Marino * This list MUST be terminated by a NULL pointer.
494*86d7f5d3SJohn Marino * The first four strings are the id, name, short description, and long
495*86d7f5d3SJohn Marino * description of the form.
496*86d7f5d3SJohn Marino * Each subsequent string determines what the strings following it represent:
497*86d7f5d3SJohn Marino * "f": create a field (id, name, short desc, long desc).
498*86d7f5d3SJohn Marino * "o": add an option to the last field (value).
499*86d7f5d3SJohn Marino * "a": create an action (id, name, short desc, long desc).
500*86d7f5d3SJohn Marino * "p": add a property to the last object (name, value).
501*86d7f5d3SJohn Marino */
502*86d7f5d3SJohn Marino struct dfui_form *
dfui_form_create(const char * id,const char * name,const char * short_desc,const char * long_desc,...)503*86d7f5d3SJohn Marino dfui_form_create(const char *id, const char *name,
504*86d7f5d3SJohn Marino const char *short_desc, const char *long_desc, ...)
505*86d7f5d3SJohn Marino {
506*86d7f5d3SJohn Marino #define DFUI_FORM_CREATE_FORM 0
507*86d7f5d3SJohn Marino #define DFUI_FORM_CREATE_FIELD 1
508*86d7f5d3SJohn Marino #define DFUI_FORM_CREATE_ACTION 2
509*86d7f5d3SJohn Marino
510*86d7f5d3SJohn Marino struct dfui_form *f;
511*86d7f5d3SJohn Marino struct dfui_info *i;
512*86d7f5d3SJohn Marino va_list args;
513*86d7f5d3SJohn Marino int state = DFUI_FORM_CREATE_FORM;
514*86d7f5d3SJohn Marino char *arg;
515*86d7f5d3SJohn Marino void *object = NULL;
516*86d7f5d3SJohn Marino const char *a_id;
517*86d7f5d3SJohn Marino char *a_name, *a_short_desc, *a_long_desc;
518*86d7f5d3SJohn Marino
519*86d7f5d3SJohn Marino i = dfui_info_new(name, short_desc, long_desc);
520*86d7f5d3SJohn Marino f = dfui_form_new(id, i);
521*86d7f5d3SJohn Marino
522*86d7f5d3SJohn Marino va_start(args, long_desc);
523*86d7f5d3SJohn Marino while ((arg = va_arg(args, char *)) != NULL) {
524*86d7f5d3SJohn Marino switch (arg[0]) {
525*86d7f5d3SJohn Marino case 'f':
526*86d7f5d3SJohn Marino a_id = va_arg(args, const char *);
527*86d7f5d3SJohn Marino a_name = va_arg(args, char *);
528*86d7f5d3SJohn Marino a_short_desc = va_arg(args, char *);
529*86d7f5d3SJohn Marino a_long_desc = va_arg(args, char *);
530*86d7f5d3SJohn Marino i = dfui_info_new(a_name, a_short_desc, a_long_desc);
531*86d7f5d3SJohn Marino object = (void *)dfui_form_field_add(f, a_id, i);
532*86d7f5d3SJohn Marino state = DFUI_FORM_CREATE_FIELD;
533*86d7f5d3SJohn Marino break;
534*86d7f5d3SJohn Marino case 'a':
535*86d7f5d3SJohn Marino a_id = va_arg(args, const char *);
536*86d7f5d3SJohn Marino a_name = va_arg(args, char *);
537*86d7f5d3SJohn Marino a_short_desc = va_arg(args, char *);
538*86d7f5d3SJohn Marino a_long_desc = va_arg(args, char *);
539*86d7f5d3SJohn Marino i = dfui_info_new(a_name, a_short_desc, a_long_desc);
540*86d7f5d3SJohn Marino object = (void *)dfui_form_action_add(f, a_id, i);
541*86d7f5d3SJohn Marino state = DFUI_FORM_CREATE_ACTION;
542*86d7f5d3SJohn Marino break;
543*86d7f5d3SJohn Marino case 'o':
544*86d7f5d3SJohn Marino a_name = va_arg(args, char *);
545*86d7f5d3SJohn Marino if (state == DFUI_FORM_CREATE_FIELD) {
546*86d7f5d3SJohn Marino dfui_field_option_add(object, a_name);
547*86d7f5d3SJohn Marino } else {
548*86d7f5d3SJohn Marino dfui_debug("form_create: can't add option to non-field\n");
549*86d7f5d3SJohn Marino }
550*86d7f5d3SJohn Marino break;
551*86d7f5d3SJohn Marino case 'h':
552*86d7f5d3SJohn Marino case 'p':
553*86d7f5d3SJohn Marino a_id = va_arg(args, char *);
554*86d7f5d3SJohn Marino a_short_desc = va_arg(args, char *);
555*86d7f5d3SJohn Marino
556*86d7f5d3SJohn Marino if (state == DFUI_FORM_CREATE_FIELD) {
557*86d7f5d3SJohn Marino dfui_field_property_set(object, a_id, a_short_desc);
558*86d7f5d3SJohn Marino } else if (state == DFUI_FORM_CREATE_ACTION) {
559*86d7f5d3SJohn Marino dfui_action_property_set(object, a_id, a_short_desc);
560*86d7f5d3SJohn Marino } else if (state == DFUI_FORM_CREATE_FORM) {
561*86d7f5d3SJohn Marino dfui_form_property_set(f, a_id, a_short_desc);
562*86d7f5d3SJohn Marino } else {
563*86d7f5d3SJohn Marino dfui_debug("form_create: can't add property in this state\n");
564*86d7f5d3SJohn Marino }
565*86d7f5d3SJohn Marino break;
566*86d7f5d3SJohn Marino
567*86d7f5d3SJohn Marino default:
568*86d7f5d3SJohn Marino dfui_debug("form_create: unknown option `%c'\n", arg[0]);
569*86d7f5d3SJohn Marino break;
570*86d7f5d3SJohn Marino }
571*86d7f5d3SJohn Marino }
572*86d7f5d3SJohn Marino
573*86d7f5d3SJohn Marino va_end(args);
574*86d7f5d3SJohn Marino return(f);
575*86d7f5d3SJohn Marino }
576*86d7f5d3SJohn Marino
577*86d7f5d3SJohn Marino void
dfui_form_free(struct dfui_form * f)578*86d7f5d3SJohn Marino dfui_form_free(struct dfui_form *f)
579*86d7f5d3SJohn Marino {
580*86d7f5d3SJohn Marino free(f->id);
581*86d7f5d3SJohn Marino dfui_info_free(f->info);
582*86d7f5d3SJohn Marino dfui_fields_free(f->field_head);
583*86d7f5d3SJohn Marino dfui_actions_free(f->action_head);
584*86d7f5d3SJohn Marino dfui_datasets_free(f->dataset_head);
585*86d7f5d3SJohn Marino dfui_properties_free(f->property_head);
586*86d7f5d3SJohn Marino AURA_FREE(f, dfui_form);
587*86d7f5d3SJohn Marino }
588*86d7f5d3SJohn Marino
589*86d7f5d3SJohn Marino struct dfui_field *
dfui_form_field_add(struct dfui_form * f,const char * id,struct dfui_info * info)590*86d7f5d3SJohn Marino dfui_form_field_add(struct dfui_form *f, const char *id, struct dfui_info *info)
591*86d7f5d3SJohn Marino {
592*86d7f5d3SJohn Marino struct dfui_field *fi;
593*86d7f5d3SJohn Marino
594*86d7f5d3SJohn Marino if (f == NULL)
595*86d7f5d3SJohn Marino return(NULL);
596*86d7f5d3SJohn Marino fi = dfui_field_new(id, info);
597*86d7f5d3SJohn Marino fi->next = f->field_head;
598*86d7f5d3SJohn Marino f->field_head = fi;
599*86d7f5d3SJohn Marino
600*86d7f5d3SJohn Marino return(fi);
601*86d7f5d3SJohn Marino }
602*86d7f5d3SJohn Marino
603*86d7f5d3SJohn Marino struct dfui_field *
dfui_form_field_attach(struct dfui_form * f,struct dfui_field * fi)604*86d7f5d3SJohn Marino dfui_form_field_attach(struct dfui_form *f, struct dfui_field *fi)
605*86d7f5d3SJohn Marino {
606*86d7f5d3SJohn Marino if (f == NULL)
607*86d7f5d3SJohn Marino return(NULL);
608*86d7f5d3SJohn Marino fi->next = f->field_head;
609*86d7f5d3SJohn Marino f->field_head = fi;
610*86d7f5d3SJohn Marino
611*86d7f5d3SJohn Marino return(fi);
612*86d7f5d3SJohn Marino }
613*86d7f5d3SJohn Marino
614*86d7f5d3SJohn Marino struct dfui_action *
dfui_form_action_add(struct dfui_form * f,const char * id,struct dfui_info * info)615*86d7f5d3SJohn Marino dfui_form_action_add(struct dfui_form *f, const char *id, struct dfui_info *info)
616*86d7f5d3SJohn Marino {
617*86d7f5d3SJohn Marino struct dfui_action *a;
618*86d7f5d3SJohn Marino
619*86d7f5d3SJohn Marino if (f == NULL)
620*86d7f5d3SJohn Marino return(NULL);
621*86d7f5d3SJohn Marino a = dfui_action_new(id, info);
622*86d7f5d3SJohn Marino a->next = f->action_head;
623*86d7f5d3SJohn Marino f->action_head = a;
624*86d7f5d3SJohn Marino
625*86d7f5d3SJohn Marino return(a);
626*86d7f5d3SJohn Marino }
627*86d7f5d3SJohn Marino
628*86d7f5d3SJohn Marino struct dfui_action *
dfui_form_action_attach(struct dfui_form * f,struct dfui_action * a)629*86d7f5d3SJohn Marino dfui_form_action_attach(struct dfui_form *f, struct dfui_action *a)
630*86d7f5d3SJohn Marino {
631*86d7f5d3SJohn Marino if (f == NULL)
632*86d7f5d3SJohn Marino return(NULL);
633*86d7f5d3SJohn Marino a->next = f->action_head;
634*86d7f5d3SJohn Marino f->action_head = a;
635*86d7f5d3SJohn Marino
636*86d7f5d3SJohn Marino return(a);
637*86d7f5d3SJohn Marino }
638*86d7f5d3SJohn Marino
639*86d7f5d3SJohn Marino void
dfui_form_dataset_add(struct dfui_form * f,struct dfui_dataset * ds)640*86d7f5d3SJohn Marino dfui_form_dataset_add(struct dfui_form *f, struct dfui_dataset *ds)
641*86d7f5d3SJohn Marino {
642*86d7f5d3SJohn Marino if (f == NULL || ds == NULL)
643*86d7f5d3SJohn Marino return;
644*86d7f5d3SJohn Marino ds->next = f->dataset_head;
645*86d7f5d3SJohn Marino f->dataset_head = ds;
646*86d7f5d3SJohn Marino }
647*86d7f5d3SJohn Marino
648*86d7f5d3SJohn Marino struct dfui_dataset *
dfui_form_dataset_get_first(const struct dfui_form * f)649*86d7f5d3SJohn Marino dfui_form_dataset_get_first(const struct dfui_form *f)
650*86d7f5d3SJohn Marino {
651*86d7f5d3SJohn Marino if (f == NULL)
652*86d7f5d3SJohn Marino return(NULL);
653*86d7f5d3SJohn Marino return(f->dataset_head);
654*86d7f5d3SJohn Marino }
655*86d7f5d3SJohn Marino
656*86d7f5d3SJohn Marino int
dfui_form_dataset_count(const struct dfui_form * f)657*86d7f5d3SJohn Marino dfui_form_dataset_count(const struct dfui_form *f)
658*86d7f5d3SJohn Marino {
659*86d7f5d3SJohn Marino int n = 0;
660*86d7f5d3SJohn Marino struct dfui_dataset *ds;
661*86d7f5d3SJohn Marino
662*86d7f5d3SJohn Marino if (f == NULL)
663*86d7f5d3SJohn Marino return(0);
664*86d7f5d3SJohn Marino
665*86d7f5d3SJohn Marino ds = f->dataset_head;
666*86d7f5d3SJohn Marino while (ds != NULL) {
667*86d7f5d3SJohn Marino n++;
668*86d7f5d3SJohn Marino ds = ds->next;
669*86d7f5d3SJohn Marino }
670*86d7f5d3SJohn Marino
671*86d7f5d3SJohn Marino return(n);
672*86d7f5d3SJohn Marino }
673*86d7f5d3SJohn Marino
674*86d7f5d3SJohn Marino void
dfui_form_datasets_free(struct dfui_form * f)675*86d7f5d3SJohn Marino dfui_form_datasets_free(struct dfui_form *f)
676*86d7f5d3SJohn Marino {
677*86d7f5d3SJohn Marino if (f == NULL)
678*86d7f5d3SJohn Marino return;
679*86d7f5d3SJohn Marino dfui_datasets_free(f->dataset_head);
680*86d7f5d3SJohn Marino f->dataset_head = NULL;
681*86d7f5d3SJohn Marino }
682*86d7f5d3SJohn Marino
683*86d7f5d3SJohn Marino struct dfui_field *
dfui_form_field_find(const struct dfui_form * f,const char * id)684*86d7f5d3SJohn Marino dfui_form_field_find(const struct dfui_form *f, const char *id)
685*86d7f5d3SJohn Marino {
686*86d7f5d3SJohn Marino struct dfui_field *fi;
687*86d7f5d3SJohn Marino
688*86d7f5d3SJohn Marino if (f == NULL)
689*86d7f5d3SJohn Marino return(NULL);
690*86d7f5d3SJohn Marino
691*86d7f5d3SJohn Marino fi = f->field_head;
692*86d7f5d3SJohn Marino while (fi != NULL) {
693*86d7f5d3SJohn Marino if (!strcmp(id, fi->id))
694*86d7f5d3SJohn Marino return(fi);
695*86d7f5d3SJohn Marino fi = fi->next;
696*86d7f5d3SJohn Marino }
697*86d7f5d3SJohn Marino
698*86d7f5d3SJohn Marino return(NULL);
699*86d7f5d3SJohn Marino }
700*86d7f5d3SJohn Marino
701*86d7f5d3SJohn Marino struct dfui_field *
dfui_form_field_get_first(const struct dfui_form * f)702*86d7f5d3SJohn Marino dfui_form_field_get_first(const struct dfui_form *f)
703*86d7f5d3SJohn Marino {
704*86d7f5d3SJohn Marino if (f == NULL)
705*86d7f5d3SJohn Marino return(NULL);
706*86d7f5d3SJohn Marino return(f->field_head);
707*86d7f5d3SJohn Marino }
708*86d7f5d3SJohn Marino
709*86d7f5d3SJohn Marino int
dfui_form_field_count(const struct dfui_form * f)710*86d7f5d3SJohn Marino dfui_form_field_count(const struct dfui_form *f)
711*86d7f5d3SJohn Marino {
712*86d7f5d3SJohn Marino int n = 0;
713*86d7f5d3SJohn Marino struct dfui_field *fi;
714*86d7f5d3SJohn Marino
715*86d7f5d3SJohn Marino if (f == NULL)
716*86d7f5d3SJohn Marino return(0);
717*86d7f5d3SJohn Marino
718*86d7f5d3SJohn Marino fi = f->field_head;
719*86d7f5d3SJohn Marino while (fi != NULL) {
720*86d7f5d3SJohn Marino n++;
721*86d7f5d3SJohn Marino fi = fi->next;
722*86d7f5d3SJohn Marino }
723*86d7f5d3SJohn Marino
724*86d7f5d3SJohn Marino return(n);
725*86d7f5d3SJohn Marino }
726*86d7f5d3SJohn Marino
727*86d7f5d3SJohn Marino struct dfui_action *
dfui_form_action_find(const struct dfui_form * f,const char * id)728*86d7f5d3SJohn Marino dfui_form_action_find(const struct dfui_form *f, const char *id)
729*86d7f5d3SJohn Marino {
730*86d7f5d3SJohn Marino struct dfui_action *a = f->action_head;
731*86d7f5d3SJohn Marino
732*86d7f5d3SJohn Marino while (a != NULL) {
733*86d7f5d3SJohn Marino if (!strcmp(id, a->id))
734*86d7f5d3SJohn Marino return(a);
735*86d7f5d3SJohn Marino a = a->next;
736*86d7f5d3SJohn Marino }
737*86d7f5d3SJohn Marino
738*86d7f5d3SJohn Marino return(NULL);
739*86d7f5d3SJohn Marino }
740*86d7f5d3SJohn Marino
741*86d7f5d3SJohn Marino struct dfui_action *
dfui_form_action_get_first(const struct dfui_form * f)742*86d7f5d3SJohn Marino dfui_form_action_get_first(const struct dfui_form *f)
743*86d7f5d3SJohn Marino {
744*86d7f5d3SJohn Marino if (f == NULL)
745*86d7f5d3SJohn Marino return(NULL);
746*86d7f5d3SJohn Marino return(f->action_head);
747*86d7f5d3SJohn Marino }
748*86d7f5d3SJohn Marino
749*86d7f5d3SJohn Marino int
dfui_form_action_count(const struct dfui_form * f)750*86d7f5d3SJohn Marino dfui_form_action_count(const struct dfui_form *f)
751*86d7f5d3SJohn Marino {
752*86d7f5d3SJohn Marino int n = 0;
753*86d7f5d3SJohn Marino struct dfui_action *a;
754*86d7f5d3SJohn Marino
755*86d7f5d3SJohn Marino if (f == NULL)
756*86d7f5d3SJohn Marino return(0);
757*86d7f5d3SJohn Marino
758*86d7f5d3SJohn Marino a = f->action_head;
759*86d7f5d3SJohn Marino while (a != NULL) {
760*86d7f5d3SJohn Marino n++;
761*86d7f5d3SJohn Marino a = a->next;
762*86d7f5d3SJohn Marino }
763*86d7f5d3SJohn Marino
764*86d7f5d3SJohn Marino return(n);
765*86d7f5d3SJohn Marino }
766*86d7f5d3SJohn Marino
767*86d7f5d3SJohn Marino struct dfui_property *
dfui_form_property_set(struct dfui_form * f,const char * name,const char * value)768*86d7f5d3SJohn Marino dfui_form_property_set(struct dfui_form *f, const char *name, const char *value)
769*86d7f5d3SJohn Marino {
770*86d7f5d3SJohn Marino return(dfui_property_set(&f->property_head, name, value));
771*86d7f5d3SJohn Marino }
772*86d7f5d3SJohn Marino
773*86d7f5d3SJohn Marino const char *
dfui_form_property_get(const struct dfui_form * f,const char * name)774*86d7f5d3SJohn Marino dfui_form_property_get(const struct dfui_form *f, const char *name)
775*86d7f5d3SJohn Marino {
776*86d7f5d3SJohn Marino return(dfui_property_get(f->property_head, name));
777*86d7f5d3SJohn Marino }
778*86d7f5d3SJohn Marino
779*86d7f5d3SJohn Marino int
dfui_form_property_is(const struct dfui_form * f,const char * name,const char * value)780*86d7f5d3SJohn Marino dfui_form_property_is(const struct dfui_form *f, const char *name, const char *value)
781*86d7f5d3SJohn Marino {
782*86d7f5d3SJohn Marino struct dfui_property *h;
783*86d7f5d3SJohn Marino
784*86d7f5d3SJohn Marino if (f == NULL)
785*86d7f5d3SJohn Marino return(0);
786*86d7f5d3SJohn Marino if ((h = dfui_property_find(f->property_head, name)) == NULL)
787*86d7f5d3SJohn Marino return(0);
788*86d7f5d3SJohn Marino return(!strcmp(h->value, value));
789*86d7f5d3SJohn Marino }
790*86d7f5d3SJohn Marino
791*86d7f5d3SJohn Marino const char *
dfui_form_get_id(const struct dfui_form * f)792*86d7f5d3SJohn Marino dfui_form_get_id(const struct dfui_form *f)
793*86d7f5d3SJohn Marino {
794*86d7f5d3SJohn Marino if (f == NULL)
795*86d7f5d3SJohn Marino return(NULL); /* XXX ? */
796*86d7f5d3SJohn Marino return(f->id);
797*86d7f5d3SJohn Marino }
798*86d7f5d3SJohn Marino
799*86d7f5d3SJohn Marino struct dfui_info *
dfui_form_get_info(const struct dfui_form * f)800*86d7f5d3SJohn Marino dfui_form_get_info(const struct dfui_form *f)
801*86d7f5d3SJohn Marino {
802*86d7f5d3SJohn Marino if (f == NULL)
803*86d7f5d3SJohn Marino return(NULL);
804*86d7f5d3SJohn Marino return(f->info);
805*86d7f5d3SJohn Marino }
806*86d7f5d3SJohn Marino
807*86d7f5d3SJohn Marino void
dfui_form_set_multiple(struct dfui_form * f,int multiple)808*86d7f5d3SJohn Marino dfui_form_set_multiple(struct dfui_form *f, int multiple)
809*86d7f5d3SJohn Marino {
810*86d7f5d3SJohn Marino if (f == NULL)
811*86d7f5d3SJohn Marino return;
812*86d7f5d3SJohn Marino f->multiple = multiple;
813*86d7f5d3SJohn Marino }
814*86d7f5d3SJohn Marino
815*86d7f5d3SJohn Marino int
dfui_form_is_multiple(const struct dfui_form * f)816*86d7f5d3SJohn Marino dfui_form_is_multiple(const struct dfui_form *f)
817*86d7f5d3SJohn Marino {
818*86d7f5d3SJohn Marino if (f == NULL)
819*86d7f5d3SJohn Marino return(0);
820*86d7f5d3SJohn Marino return(f->multiple);
821*86d7f5d3SJohn Marino }
822*86d7f5d3SJohn Marino
823*86d7f5d3SJohn Marino void
dfui_form_set_extensible(struct dfui_form * f,int extensible)824*86d7f5d3SJohn Marino dfui_form_set_extensible(struct dfui_form *f, int extensible)
825*86d7f5d3SJohn Marino {
826*86d7f5d3SJohn Marino if (f == NULL)
827*86d7f5d3SJohn Marino return;
828*86d7f5d3SJohn Marino f->extensible = extensible;
829*86d7f5d3SJohn Marino }
830*86d7f5d3SJohn Marino
831*86d7f5d3SJohn Marino int
dfui_form_is_extensible(const struct dfui_form * f)832*86d7f5d3SJohn Marino dfui_form_is_extensible(const struct dfui_form *f)
833*86d7f5d3SJohn Marino {
834*86d7f5d3SJohn Marino if (f == NULL)
835*86d7f5d3SJohn Marino return(0);
836*86d7f5d3SJohn Marino return(f->extensible);
837*86d7f5d3SJohn Marino }
838*86d7f5d3SJohn Marino
839*86d7f5d3SJohn Marino /*** CELLDATAS ***/
840*86d7f5d3SJohn Marino
841*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_celldata_new(const char * field_id,const char * value)842*86d7f5d3SJohn Marino dfui_celldata_new(const char *field_id, const char *value)
843*86d7f5d3SJohn Marino {
844*86d7f5d3SJohn Marino struct dfui_celldata *c;
845*86d7f5d3SJohn Marino
846*86d7f5d3SJohn Marino AURA_MALLOC(c, dfui_celldata);
847*86d7f5d3SJohn Marino c->field_id = aura_strdup(field_id);
848*86d7f5d3SJohn Marino c->value = aura_strdup(value);
849*86d7f5d3SJohn Marino
850*86d7f5d3SJohn Marino return(c);
851*86d7f5d3SJohn Marino }
852*86d7f5d3SJohn Marino
853*86d7f5d3SJohn Marino void
dfui_celldata_free(struct dfui_celldata * c)854*86d7f5d3SJohn Marino dfui_celldata_free(struct dfui_celldata *c)
855*86d7f5d3SJohn Marino {
856*86d7f5d3SJohn Marino if (c == NULL)
857*86d7f5d3SJohn Marino return;
858*86d7f5d3SJohn Marino free(c->field_id);
859*86d7f5d3SJohn Marino free(c->value);
860*86d7f5d3SJohn Marino AURA_FREE(c, dfui_celldata);
861*86d7f5d3SJohn Marino }
862*86d7f5d3SJohn Marino
863*86d7f5d3SJohn Marino void
dfui_celldatas_free(struct dfui_celldata * head)864*86d7f5d3SJohn Marino dfui_celldatas_free(struct dfui_celldata *head)
865*86d7f5d3SJohn Marino {
866*86d7f5d3SJohn Marino struct dfui_celldata *c;
867*86d7f5d3SJohn Marino
868*86d7f5d3SJohn Marino c = head;
869*86d7f5d3SJohn Marino while (c != NULL) {
870*86d7f5d3SJohn Marino head = c->next;
871*86d7f5d3SJohn Marino dfui_celldata_free(c);
872*86d7f5d3SJohn Marino c = head;
873*86d7f5d3SJohn Marino }
874*86d7f5d3SJohn Marino }
875*86d7f5d3SJohn Marino
876*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_celldata_find(struct dfui_celldata * head,const char * id)877*86d7f5d3SJohn Marino dfui_celldata_find(struct dfui_celldata *head, const char *id)
878*86d7f5d3SJohn Marino {
879*86d7f5d3SJohn Marino struct dfui_celldata *c;
880*86d7f5d3SJohn Marino
881*86d7f5d3SJohn Marino c = head;
882*86d7f5d3SJohn Marino while (c != NULL) {
883*86d7f5d3SJohn Marino if (!strcmp(id, c->field_id))
884*86d7f5d3SJohn Marino return(c);
885*86d7f5d3SJohn Marino c = c->next;
886*86d7f5d3SJohn Marino }
887*86d7f5d3SJohn Marino
888*86d7f5d3SJohn Marino return(NULL);
889*86d7f5d3SJohn Marino }
890*86d7f5d3SJohn Marino
891*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_celldata_get_next(const struct dfui_celldata * cd)892*86d7f5d3SJohn Marino dfui_celldata_get_next(const struct dfui_celldata *cd)
893*86d7f5d3SJohn Marino {
894*86d7f5d3SJohn Marino if (cd != NULL) {
895*86d7f5d3SJohn Marino return(cd->next);
896*86d7f5d3SJohn Marino } else {
897*86d7f5d3SJohn Marino return(NULL);
898*86d7f5d3SJohn Marino }
899*86d7f5d3SJohn Marino }
900*86d7f5d3SJohn Marino
901*86d7f5d3SJohn Marino const char *
dfui_celldata_get_field_id(const struct dfui_celldata * cd)902*86d7f5d3SJohn Marino dfui_celldata_get_field_id(const struct dfui_celldata *cd)
903*86d7f5d3SJohn Marino {
904*86d7f5d3SJohn Marino if (cd != NULL) {
905*86d7f5d3SJohn Marino return(cd->field_id);
906*86d7f5d3SJohn Marino } else {
907*86d7f5d3SJohn Marino return(NULL);
908*86d7f5d3SJohn Marino }
909*86d7f5d3SJohn Marino }
910*86d7f5d3SJohn Marino
911*86d7f5d3SJohn Marino const char *
dfui_celldata_get_value(const struct dfui_celldata * cd)912*86d7f5d3SJohn Marino dfui_celldata_get_value(const struct dfui_celldata *cd)
913*86d7f5d3SJohn Marino {
914*86d7f5d3SJohn Marino if (cd != NULL) {
915*86d7f5d3SJohn Marino return(cd->value);
916*86d7f5d3SJohn Marino } else {
917*86d7f5d3SJohn Marino return("");
918*86d7f5d3SJohn Marino }
919*86d7f5d3SJohn Marino }
920*86d7f5d3SJohn Marino
921*86d7f5d3SJohn Marino /*** DATASETS ***/
922*86d7f5d3SJohn Marino
923*86d7f5d3SJohn Marino struct dfui_dataset *
dfui_dataset_new(void)924*86d7f5d3SJohn Marino dfui_dataset_new(void)
925*86d7f5d3SJohn Marino {
926*86d7f5d3SJohn Marino struct dfui_dataset *ds;
927*86d7f5d3SJohn Marino
928*86d7f5d3SJohn Marino AURA_MALLOC(ds, dfui_dataset);
929*86d7f5d3SJohn Marino ds->celldata_head = NULL;
930*86d7f5d3SJohn Marino ds->next = NULL;
931*86d7f5d3SJohn Marino
932*86d7f5d3SJohn Marino return(ds);
933*86d7f5d3SJohn Marino }
934*86d7f5d3SJohn Marino
935*86d7f5d3SJohn Marino struct dfui_dataset *
dfui_dataset_dup(const struct dfui_dataset * ds)936*86d7f5d3SJohn Marino dfui_dataset_dup(const struct dfui_dataset *ds)
937*86d7f5d3SJohn Marino {
938*86d7f5d3SJohn Marino struct dfui_dataset *nds;
939*86d7f5d3SJohn Marino struct dfui_celldata *cd;
940*86d7f5d3SJohn Marino
941*86d7f5d3SJohn Marino nds = dfui_dataset_new();
942*86d7f5d3SJohn Marino
943*86d7f5d3SJohn Marino for (cd = ds->celldata_head; cd != NULL; cd = cd->next) {
944*86d7f5d3SJohn Marino dfui_dataset_celldata_add(nds,
945*86d7f5d3SJohn Marino cd->field_id, cd->value);
946*86d7f5d3SJohn Marino }
947*86d7f5d3SJohn Marino
948*86d7f5d3SJohn Marino return(nds);
949*86d7f5d3SJohn Marino }
950*86d7f5d3SJohn Marino
951*86d7f5d3SJohn Marino void
dfui_dataset_free(struct dfui_dataset * ds)952*86d7f5d3SJohn Marino dfui_dataset_free(struct dfui_dataset *ds)
953*86d7f5d3SJohn Marino {
954*86d7f5d3SJohn Marino dfui_celldatas_free(ds->celldata_head);
955*86d7f5d3SJohn Marino AURA_FREE(ds, dfui_dataset);
956*86d7f5d3SJohn Marino }
957*86d7f5d3SJohn Marino
958*86d7f5d3SJohn Marino void
dfui_datasets_free(struct dfui_dataset * head)959*86d7f5d3SJohn Marino dfui_datasets_free(struct dfui_dataset *head)
960*86d7f5d3SJohn Marino {
961*86d7f5d3SJohn Marino struct dfui_dataset *ds;
962*86d7f5d3SJohn Marino
963*86d7f5d3SJohn Marino ds = head;
964*86d7f5d3SJohn Marino while (ds != NULL) {
965*86d7f5d3SJohn Marino head = ds->next;
966*86d7f5d3SJohn Marino dfui_dataset_free(ds);
967*86d7f5d3SJohn Marino ds = head;
968*86d7f5d3SJohn Marino }
969*86d7f5d3SJohn Marino }
970*86d7f5d3SJohn Marino
971*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_dataset_celldata_add(struct dfui_dataset * ds,const char * field_id,const char * value)972*86d7f5d3SJohn Marino dfui_dataset_celldata_add(struct dfui_dataset *ds, const char *field_id, const char *value)
973*86d7f5d3SJohn Marino {
974*86d7f5d3SJohn Marino struct dfui_celldata *c;
975*86d7f5d3SJohn Marino
976*86d7f5d3SJohn Marino if (ds == NULL)
977*86d7f5d3SJohn Marino return(NULL);
978*86d7f5d3SJohn Marino
979*86d7f5d3SJohn Marino c = dfui_celldata_new(field_id, value);
980*86d7f5d3SJohn Marino c->next = ds->celldata_head;
981*86d7f5d3SJohn Marino ds->celldata_head = c;
982*86d7f5d3SJohn Marino
983*86d7f5d3SJohn Marino return(c);
984*86d7f5d3SJohn Marino }
985*86d7f5d3SJohn Marino
986*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_dataset_celldata_get_first(const struct dfui_dataset * ds)987*86d7f5d3SJohn Marino dfui_dataset_celldata_get_first(const struct dfui_dataset *ds)
988*86d7f5d3SJohn Marino {
989*86d7f5d3SJohn Marino if (ds == NULL)
990*86d7f5d3SJohn Marino return(NULL);
991*86d7f5d3SJohn Marino return(ds->celldata_head);
992*86d7f5d3SJohn Marino }
993*86d7f5d3SJohn Marino
994*86d7f5d3SJohn Marino struct dfui_celldata *
dfui_dataset_celldata_find(const struct dfui_dataset * ds,const char * field_id)995*86d7f5d3SJohn Marino dfui_dataset_celldata_find(const struct dfui_dataset *ds, const char *field_id)
996*86d7f5d3SJohn Marino {
997*86d7f5d3SJohn Marino if (ds == NULL)
998*86d7f5d3SJohn Marino return(NULL);
999*86d7f5d3SJohn Marino return(dfui_celldata_find(ds->celldata_head, field_id));
1000*86d7f5d3SJohn Marino }
1001*86d7f5d3SJohn Marino
1002*86d7f5d3SJohn Marino struct dfui_dataset *
dfui_dataset_get_next(const struct dfui_dataset * ds)1003*86d7f5d3SJohn Marino dfui_dataset_get_next(const struct dfui_dataset *ds)
1004*86d7f5d3SJohn Marino {
1005*86d7f5d3SJohn Marino if (ds == NULL)
1006*86d7f5d3SJohn Marino return(NULL);
1007*86d7f5d3SJohn Marino return(ds->next);
1008*86d7f5d3SJohn Marino }
1009*86d7f5d3SJohn Marino
1010*86d7f5d3SJohn Marino /*
1011*86d7f5d3SJohn Marino * Returns the value of the celldata with the given id found in the
1012*86d7f5d3SJohn Marino * given dataset. If no such celldata is found, a constant zero-length
1013*86d7f5d3SJohn Marino * string is returned. As such, the return value of this function is
1014*86d7f5d3SJohn Marino * guaranteed to not be NULL and must NEVER be freed after use.
1015*86d7f5d3SJohn Marino */
1016*86d7f5d3SJohn Marino const char *
dfui_dataset_get_value(const struct dfui_dataset * ds,const char * id)1017*86d7f5d3SJohn Marino dfui_dataset_get_value(const struct dfui_dataset *ds, const char *id)
1018*86d7f5d3SJohn Marino {
1019*86d7f5d3SJohn Marino struct dfui_celldata *cd;
1020*86d7f5d3SJohn Marino
1021*86d7f5d3SJohn Marino if ((cd = dfui_dataset_celldata_find(ds, id)) != NULL) {
1022*86d7f5d3SJohn Marino return(dfui_celldata_get_value(cd));
1023*86d7f5d3SJohn Marino } else {
1024*86d7f5d3SJohn Marino return("");
1025*86d7f5d3SJohn Marino }
1026*86d7f5d3SJohn Marino }
1027*86d7f5d3SJohn Marino
1028*86d7f5d3SJohn Marino /*
1029*86d7f5d3SJohn Marino * Allocates a string to hold the value of the celldata with the
1030*86d7f5d3SJohn Marino * given id found in the given dataset. Even if no such celldata
1031*86d7f5d3SJohn Marino * is found, an allocated, zero-length string is returned. As such,
1032*86d7f5d3SJohn Marino * the return value of this function is guaranteed to not be NULL,
1033*86d7f5d3SJohn Marino * and must ALWAYS be freed after use.
1034*86d7f5d3SJohn Marino */
1035*86d7f5d3SJohn Marino char *
dfui_dataset_dup_value(const struct dfui_dataset * ds,const char * id)1036*86d7f5d3SJohn Marino dfui_dataset_dup_value(const struct dfui_dataset *ds, const char *id)
1037*86d7f5d3SJohn Marino {
1038*86d7f5d3SJohn Marino return(aura_strdup(dfui_dataset_get_value(ds, id)));
1039*86d7f5d3SJohn Marino }
1040*86d7f5d3SJohn Marino
1041*86d7f5d3SJohn Marino /*** RESPONSES ***/
1042*86d7f5d3SJohn Marino
1043*86d7f5d3SJohn Marino struct dfui_response *
dfui_response_new(const char * form_id,const char * action_id)1044*86d7f5d3SJohn Marino dfui_response_new(const char *form_id, const char *action_id)
1045*86d7f5d3SJohn Marino {
1046*86d7f5d3SJohn Marino struct dfui_response *r;
1047*86d7f5d3SJohn Marino
1048*86d7f5d3SJohn Marino AURA_MALLOC(r, dfui_response);
1049*86d7f5d3SJohn Marino r->form_id = aura_strdup(form_id);
1050*86d7f5d3SJohn Marino r->action_id = aura_strdup(action_id);
1051*86d7f5d3SJohn Marino r->dataset_head = NULL;
1052*86d7f5d3SJohn Marino
1053*86d7f5d3SJohn Marino return(r);
1054*86d7f5d3SJohn Marino }
1055*86d7f5d3SJohn Marino
1056*86d7f5d3SJohn Marino void
dfui_response_free(struct dfui_response * r)1057*86d7f5d3SJohn Marino dfui_response_free(struct dfui_response *r)
1058*86d7f5d3SJohn Marino {
1059*86d7f5d3SJohn Marino free(r->form_id);
1060*86d7f5d3SJohn Marino free(r->action_id);
1061*86d7f5d3SJohn Marino dfui_datasets_free(r->dataset_head);
1062*86d7f5d3SJohn Marino AURA_FREE(r, dfui_response);
1063*86d7f5d3SJohn Marino }
1064*86d7f5d3SJohn Marino
1065*86d7f5d3SJohn Marino void
dfui_response_dataset_add(struct dfui_response * r,struct dfui_dataset * ds)1066*86d7f5d3SJohn Marino dfui_response_dataset_add(struct dfui_response *r, struct dfui_dataset *ds)
1067*86d7f5d3SJohn Marino {
1068*86d7f5d3SJohn Marino if (ds == NULL || r == NULL)
1069*86d7f5d3SJohn Marino return;
1070*86d7f5d3SJohn Marino ds->next = r->dataset_head;
1071*86d7f5d3SJohn Marino r->dataset_head = ds;
1072*86d7f5d3SJohn Marino }
1073*86d7f5d3SJohn Marino
1074*86d7f5d3SJohn Marino struct dfui_dataset *
dfui_response_dataset_get_first(const struct dfui_response * r)1075*86d7f5d3SJohn Marino dfui_response_dataset_get_first(const struct dfui_response *r)
1076*86d7f5d3SJohn Marino {
1077*86d7f5d3SJohn Marino if (r == NULL)
1078*86d7f5d3SJohn Marino return(NULL);
1079*86d7f5d3SJohn Marino return(r->dataset_head);
1080*86d7f5d3SJohn Marino }
1081*86d7f5d3SJohn Marino
1082*86d7f5d3SJohn Marino int
dfui_response_dataset_count(const struct dfui_response * r)1083*86d7f5d3SJohn Marino dfui_response_dataset_count(const struct dfui_response *r)
1084*86d7f5d3SJohn Marino {
1085*86d7f5d3SJohn Marino int n = 0;
1086*86d7f5d3SJohn Marino struct dfui_dataset *ds;
1087*86d7f5d3SJohn Marino
1088*86d7f5d3SJohn Marino if (r == NULL)
1089*86d7f5d3SJohn Marino return(0);
1090*86d7f5d3SJohn Marino
1091*86d7f5d3SJohn Marino ds = r->dataset_head;
1092*86d7f5d3SJohn Marino while (ds != NULL) {
1093*86d7f5d3SJohn Marino n++;
1094*86d7f5d3SJohn Marino ds = ds->next;
1095*86d7f5d3SJohn Marino }
1096*86d7f5d3SJohn Marino
1097*86d7f5d3SJohn Marino return(n);
1098*86d7f5d3SJohn Marino }
1099*86d7f5d3SJohn Marino
1100*86d7f5d3SJohn Marino const char *
dfui_response_get_form_id(const struct dfui_response * r)1101*86d7f5d3SJohn Marino dfui_response_get_form_id(const struct dfui_response *r)
1102*86d7f5d3SJohn Marino {
1103*86d7f5d3SJohn Marino if (r == NULL)
1104*86d7f5d3SJohn Marino return(NULL); /* XXX ? */
1105*86d7f5d3SJohn Marino return(r->form_id);
1106*86d7f5d3SJohn Marino }
1107*86d7f5d3SJohn Marino
1108*86d7f5d3SJohn Marino const char *
dfui_response_get_action_id(const struct dfui_response * r)1109*86d7f5d3SJohn Marino dfui_response_get_action_id(const struct dfui_response *r)
1110*86d7f5d3SJohn Marino {
1111*86d7f5d3SJohn Marino if (r == NULL)
1112*86d7f5d3SJohn Marino return(NULL); /* XXX ? */
1113*86d7f5d3SJohn Marino return(r->action_id);
1114*86d7f5d3SJohn Marino }
1115*86d7f5d3SJohn Marino
1116*86d7f5d3SJohn Marino /* PROGRESS BARS */
1117*86d7f5d3SJohn Marino
1118*86d7f5d3SJohn Marino struct dfui_progress *
dfui_progress_new(struct dfui_info * info,int amount)1119*86d7f5d3SJohn Marino dfui_progress_new(struct dfui_info *info, int amount)
1120*86d7f5d3SJohn Marino {
1121*86d7f5d3SJohn Marino struct dfui_progress *pr;
1122*86d7f5d3SJohn Marino
1123*86d7f5d3SJohn Marino AURA_MALLOC(pr, dfui_progress);
1124*86d7f5d3SJohn Marino pr->info = info;
1125*86d7f5d3SJohn Marino pr->amount = amount;
1126*86d7f5d3SJohn Marino pr->streaming = 0;
1127*86d7f5d3SJohn Marino pr->msg_line = NULL;
1128*86d7f5d3SJohn Marino
1129*86d7f5d3SJohn Marino return(pr);
1130*86d7f5d3SJohn Marino }
1131*86d7f5d3SJohn Marino
1132*86d7f5d3SJohn Marino void
dfui_progress_free(struct dfui_progress * pr)1133*86d7f5d3SJohn Marino dfui_progress_free(struct dfui_progress *pr)
1134*86d7f5d3SJohn Marino {
1135*86d7f5d3SJohn Marino if (pr == NULL)
1136*86d7f5d3SJohn Marino return;
1137*86d7f5d3SJohn Marino dfui_info_free(pr->info);
1138*86d7f5d3SJohn Marino if (pr->msg_line != NULL)
1139*86d7f5d3SJohn Marino free(pr->msg_line);
1140*86d7f5d3SJohn Marino AURA_FREE(pr, dfui_progress);
1141*86d7f5d3SJohn Marino }
1142*86d7f5d3SJohn Marino
1143*86d7f5d3SJohn Marino struct dfui_info *
dfui_progress_get_info(const struct dfui_progress * pr)1144*86d7f5d3SJohn Marino dfui_progress_get_info(const struct dfui_progress *pr)
1145*86d7f5d3SJohn Marino {
1146*86d7f5d3SJohn Marino if (pr == NULL)
1147*86d7f5d3SJohn Marino return(NULL);
1148*86d7f5d3SJohn Marino return(pr->info);
1149*86d7f5d3SJohn Marino }
1150*86d7f5d3SJohn Marino
1151*86d7f5d3SJohn Marino void
dfui_progress_set_amount(struct dfui_progress * pr,int amount)1152*86d7f5d3SJohn Marino dfui_progress_set_amount(struct dfui_progress *pr, int amount)
1153*86d7f5d3SJohn Marino {
1154*86d7f5d3SJohn Marino if (pr == NULL)
1155*86d7f5d3SJohn Marino return;
1156*86d7f5d3SJohn Marino pr->amount = amount;
1157*86d7f5d3SJohn Marino }
1158*86d7f5d3SJohn Marino
1159*86d7f5d3SJohn Marino int
dfui_progress_get_amount(const struct dfui_progress * pr)1160*86d7f5d3SJohn Marino dfui_progress_get_amount(const struct dfui_progress *pr)
1161*86d7f5d3SJohn Marino {
1162*86d7f5d3SJohn Marino if (pr == NULL)
1163*86d7f5d3SJohn Marino return(0);
1164*86d7f5d3SJohn Marino return(pr->amount);
1165*86d7f5d3SJohn Marino }
1166*86d7f5d3SJohn Marino
1167*86d7f5d3SJohn Marino void
dfui_progress_set_streaming(struct dfui_progress * pr,int streaming)1168*86d7f5d3SJohn Marino dfui_progress_set_streaming(struct dfui_progress *pr, int streaming)
1169*86d7f5d3SJohn Marino {
1170*86d7f5d3SJohn Marino if (pr == NULL)
1171*86d7f5d3SJohn Marino return;
1172*86d7f5d3SJohn Marino pr->streaming = streaming;
1173*86d7f5d3SJohn Marino }
1174*86d7f5d3SJohn Marino
1175*86d7f5d3SJohn Marino int
dfui_progress_get_streaming(const struct dfui_progress * pr)1176*86d7f5d3SJohn Marino dfui_progress_get_streaming(const struct dfui_progress *pr)
1177*86d7f5d3SJohn Marino {
1178*86d7f5d3SJohn Marino if (pr == NULL)
1179*86d7f5d3SJohn Marino return(0);
1180*86d7f5d3SJohn Marino return(pr->streaming);
1181*86d7f5d3SJohn Marino }
1182*86d7f5d3SJohn Marino
1183*86d7f5d3SJohn Marino void
dfui_progress_set_msg_line(struct dfui_progress * pr,const char * msg_line)1184*86d7f5d3SJohn Marino dfui_progress_set_msg_line(struct dfui_progress *pr, const char *msg_line)
1185*86d7f5d3SJohn Marino {
1186*86d7f5d3SJohn Marino if (pr == NULL)
1187*86d7f5d3SJohn Marino return;
1188*86d7f5d3SJohn Marino if (pr->msg_line != NULL)
1189*86d7f5d3SJohn Marino free(pr->msg_line);
1190*86d7f5d3SJohn Marino pr->msg_line = aura_strdup(msg_line);
1191*86d7f5d3SJohn Marino }
1192*86d7f5d3SJohn Marino
1193*86d7f5d3SJohn Marino const char *
dfui_progress_get_msg_line(const struct dfui_progress * pr)1194*86d7f5d3SJohn Marino dfui_progress_get_msg_line(const struct dfui_progress *pr)
1195*86d7f5d3SJohn Marino {
1196*86d7f5d3SJohn Marino if (pr == NULL)
1197*86d7f5d3SJohn Marino return("");
1198*86d7f5d3SJohn Marino if (pr->msg_line == NULL)
1199*86d7f5d3SJohn Marino return("");
1200*86d7f5d3SJohn Marino return(pr->msg_line);
1201*86d7f5d3SJohn Marino }
1202