2 * Copyright (c)2004 Cat's Eye Technologies. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
16 * Neither the name of Cat's Eye Technologies nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31 * OF THE POSSIBILITY OF SUCH DAMAGE.
36 * $Id: dfui.h,v 1.28 2005/02/07 06:39:59 cpressey Exp $
43 #define DFUI_BEGINDECLS extern "C" {
44 #define DFUI_ENDDECLS }
46 #define DFUI_BEGINDECLS
52 #include <libaura/buffer.h>
58 typedef int dfui_err_t
;
64 #define DFUI_SUCCESS (dfui_err_t)1
65 #define DFUI_FAILURE (dfui_err_t)0
71 #define DFUI_TRANSPORT_CAPS 1
72 #define DFUI_TRANSPORT_NPIPE 2
73 #define DFUI_TRANSPORT_TCP 3
79 #define DFUI_BE_MSG_READY 'r' /* send me back a reply please */
81 #define DFUI_BE_MSG_STOP 'X' /* shut down please, we're done */
82 #define DFUI_BE_MSG_PRESENT 'P' /* present this form to the user */
83 #define DFUI_BE_MSG_PROG_BEGIN 'b' /* begin showing a progress bar */
84 #define DFUI_BE_MSG_PROG_UPDATE 'u' /* update the progress bar */
85 #define DFUI_BE_MSG_PROG_END 'e' /* stop showing the progress bar */
87 #define DFUI_BE_MSG_SET_GLOBAL 'G' /* set a global setting in the f/e */
89 #define DFUI_FE_MSG_READY 'r' /* send me a form or something */
91 #define DFUI_FE_MSG_SUBMIT 'S' /* submit results of a form */
92 #define DFUI_FE_MSG_CONTINUE 'c' /* nothing stopping a progress bar */
93 #define DFUI_FE_MSG_CANCEL 'C' /* user cancelled a progress bar */
94 #define DFUI_FE_MSG_ABORT 'X' /* something catastrophic (^C?) */
97 * STRUCTURE PROTOTYPES
100 struct dfui_connection
;
103 struct dfui_property
;
105 struct dfui_celldata
;
110 struct dfui_response
;
111 struct dfui_progress
;
114 * STRUCTURE DEFINITIONS
117 #ifdef NEEDS_DFUI_STRUCTURE_DEFINITIONS
121 struct dfui_connection
{
122 int transport
; /* transport layer: CAPS, NPIPE, or TCP */
123 char *rendezvous
; /* rendezvous point */
124 struct aura_buffer
*ebuf
; /* last message recvd */
125 int is_connected
; /* was a connection actually established? */
126 void *t_data
; /* transport-specific connection data */
128 dfui_err_t (*be_start
)(struct dfui_connection
*);
129 dfui_err_t (*be_stop
)(struct dfui_connection
*);
130 dfui_err_t (*be_ll_exchange
)(struct dfui_connection
*, char, const char *);
132 dfui_err_t (*fe_connect
)(struct dfui_connection
*);
133 dfui_err_t (*fe_disconnect
)(struct dfui_connection
*);
135 dfui_err_t (*fe_ll_request
)(struct dfui_connection
*, char, const char *);
138 /* Common structures on objects */
146 struct dfui_dataset
{
147 struct dfui_dataset
*next
;
148 struct dfui_celldata
*celldata_head
;
151 struct dfui_celldata
{
152 struct dfui_celldata
*next
;
158 * Properties may be either strong (imply a behavioural guarantee from
159 * the frontend) or weak (may be ignored or interpreted subjectively
160 * by the frontend) depending on their name. Currently only the
161 * following properties are strong:
166 struct dfui_property
{
167 struct dfui_property
*next
;
176 struct dfui_info
*info
;
179 struct dfui_field
*field_head
;
180 struct dfui_action
*action_head
;
181 struct dfui_dataset
*dataset_head
;
182 struct dfui_property
*property_head
;
187 struct dfui_info
*info
;
188 struct dfui_field
*next
;
189 struct dfui_option
*option_head
;
190 struct dfui_property
*property_head
;
195 struct dfui_option
*next
;
200 struct dfui_info
*info
;
201 struct dfui_action
*next
;
202 struct dfui_property
*property_head
;
205 /* Progress objects */
207 struct dfui_progress
{
208 struct dfui_info
*info
;
210 int streaming
; /* if 1, msg will stream in line by line */
211 char *msg_line
; /* next line of message if streaming=1 */
214 /* Response objects */
216 struct dfui_response
{
219 struct dfui_dataset
*dataset_head
;
222 /* Payload objects */
224 struct dfui_payload
{
226 struct dfui_form
*form
;
227 struct dfui_progress
*progress
;
228 struct dfui_property
*global_setting
;
231 #endif /* NEEDS_DFUI_STRUCTURE_DEFINITIONS */
238 * UTILITY (form/field creation, etc)
241 struct dfui_info
*dfui_info_new(const char *, const char *, const char *);
242 void dfui_info_free(struct dfui_info
*);
243 const char *dfui_info_get_name(const struct dfui_info
*);
244 const char *dfui_info_get_short_desc(const struct dfui_info
*);
245 const char *dfui_info_get_long_desc(const struct dfui_info
*);
246 void dfui_info_set_name(struct dfui_info
*, const char *);
247 void dfui_info_set_short_desc(struct dfui_info
*, const char *);
248 void dfui_info_set_long_desc(struct dfui_info
*, const char *);
250 struct dfui_property
*dfui_property_new(const char *, const char *);
251 void dfui_property_free(struct dfui_property
*);
252 void dfui_properties_free(struct dfui_property
*);
253 struct dfui_property
*dfui_property_find(struct dfui_property
*, const char *);
254 const char *dfui_property_get(struct dfui_property
*, const char *);
255 struct dfui_property
*dfui_property_set(struct dfui_property
**, const char *, const char *);
256 const char *dfui_property_get_name(const struct dfui_property
*);
257 const char *dfui_property_get_value(const struct dfui_property
*);
259 struct dfui_celldata
*dfui_celldata_new(const char *, const char *);
260 void dfui_celldata_free(struct dfui_celldata
*);
261 void dfui_celldatas_free(struct dfui_celldata
*);
262 struct dfui_celldata
*dfui_celldata_find(struct dfui_celldata
*, const char *);
263 struct dfui_celldata
*dfui_celldata_get_next(const struct dfui_celldata
*);
264 const char * dfui_celldata_get_field_id(const struct dfui_celldata
*);
265 const char * dfui_celldata_get_value(const struct dfui_celldata
*);
267 struct dfui_dataset
*dfui_dataset_new(void);
268 struct dfui_dataset
*dfui_dataset_dup(const struct dfui_dataset
*);
269 void dfui_dataset_free(struct dfui_dataset
*);
270 void dfui_datasets_free(struct dfui_dataset
*);
271 struct dfui_celldata
*dfui_dataset_celldata_add(struct dfui_dataset
*,
272 const char *, const char *);
273 struct dfui_celldata
*dfui_dataset_celldata_get_first(const struct dfui_dataset
*);
274 struct dfui_celldata
*dfui_dataset_celldata_find(const struct dfui_dataset
*, const char *);
275 struct dfui_dataset
*dfui_dataset_get_next(const struct dfui_dataset
*);
276 const char *dfui_dataset_get_value(const struct dfui_dataset
*, const char *);
277 char *dfui_dataset_dup_value(const struct dfui_dataset
*, const char *);
279 struct dfui_field
*dfui_field_new(const char *, struct dfui_info
*);
280 void dfui_field_free(struct dfui_field
*);
281 void dfui_fields_free(struct dfui_field
*);
282 struct dfui_option
*dfui_field_option_add(struct dfui_field
*, const char *);
283 struct dfui_option
*dfui_field_option_get_first(const struct dfui_field
*);
284 struct dfui_property
*dfui_field_property_set(struct dfui_field
*, const char *, const char *);
285 const char *dfui_field_property_get(const struct dfui_field
*, const char *);
286 int dfui_field_property_is(const struct dfui_field
*, const char *, const char *);
287 struct dfui_field
*dfui_field_get_next(const struct dfui_field
*);
288 const char *dfui_field_get_id(const struct dfui_field
*);
289 struct dfui_info
*dfui_field_get_info(const struct dfui_field
*);
291 struct dfui_option
*dfui_option_new(const char *);
292 void dfui_option_free(struct dfui_option
*);
293 void dfui_options_free(struct dfui_option
*);
294 struct dfui_option
*dfui_option_get_next(const struct dfui_option
*);
295 const char *dfui_option_get_value(const struct dfui_option
*);
297 struct dfui_action
*dfui_action_new(const char *, struct dfui_info
*);
298 void dfui_action_free(struct dfui_action
*);
299 void dfui_actions_free(struct dfui_action
*);
300 struct dfui_action
*dfui_action_get_next(const struct dfui_action
*);
301 struct dfui_property
*dfui_action_property_set(struct dfui_action
*, const char *, const char *);
302 const char *dfui_action_property_get(const struct dfui_action
*, const char *);
303 int dfui_action_property_is(const struct dfui_action
*, const char *, const char *);
304 const char *dfui_action_get_id(const struct dfui_action
*);
305 struct dfui_info
*dfui_action_get_info(const struct dfui_action
*);
307 struct dfui_form
*dfui_form_new(const char *, struct dfui_info
*);
308 struct dfui_form
*dfui_form_create(const char *, const char *, const char *, const char *, ...);
309 void dfui_form_free(struct dfui_form
*);
310 struct dfui_field
*dfui_form_field_add(struct dfui_form
*,
311 const char *, struct dfui_info
*);
312 struct dfui_field
*dfui_form_field_attach(struct dfui_form
*,
313 struct dfui_field
*);
314 struct dfui_action
*dfui_form_action_add(struct dfui_form
*,
315 const char *, struct dfui_info
*);
316 struct dfui_action
*dfui_form_action_attach(struct dfui_form
*,
317 struct dfui_action
*);
318 void dfui_form_dataset_add(struct dfui_form
*,
319 struct dfui_dataset
*);
320 struct dfui_dataset
*dfui_form_dataset_get_first(const struct dfui_form
*);
321 int dfui_form_dataset_count(const struct dfui_form
*);
322 void dfui_form_datasets_free(struct dfui_form
*);
323 struct dfui_property
*dfui_form_property_set(struct dfui_form
*, const char *, const char *);
324 const char *dfui_form_property_get(const struct dfui_form
*, const char *);
325 int dfui_form_property_is(const struct dfui_form
*, const char *, const char *);
326 struct dfui_field
*dfui_form_field_find(const struct dfui_form
*, const char *);
327 struct dfui_field
*dfui_form_field_get_first(const struct dfui_form
*);
328 int dfui_form_field_count(const struct dfui_form
*);
329 struct dfui_action
*dfui_form_action_find(const struct dfui_form
*, const char *);
330 struct dfui_action
*dfui_form_action_get_first(const struct dfui_form
*);
331 int dfui_form_action_count(const struct dfui_form
*);
332 const char *dfui_form_get_id(const struct dfui_form
*);
333 struct dfui_info
*dfui_form_get_info(const struct dfui_form
*);
334 void dfui_form_set_multiple(struct dfui_form
*, int);
335 int dfui_form_is_multiple(const struct dfui_form
*);
336 void dfui_form_set_extensible(struct dfui_form
*, int);
337 int dfui_form_is_extensible(const struct dfui_form
*);
339 struct dfui_response
*dfui_response_new(const char *, const char *);
340 void dfui_response_free(struct dfui_response
*);
341 void dfui_response_dataset_add(struct dfui_response
*,
342 struct dfui_dataset
*);
343 struct dfui_dataset
*dfui_response_dataset_get_first(const struct dfui_response
*);
344 int dfui_response_dataset_count(const struct dfui_response
*);
345 const char *dfui_response_get_form_id(const struct dfui_response
*);
346 const char *dfui_response_get_action_id(const struct dfui_response
*);
348 struct dfui_progress
*dfui_progress_new(struct dfui_info
*, int);
349 void dfui_progress_free(struct dfui_progress
*);
350 struct dfui_info
*dfui_progress_get_info(const struct dfui_progress
*);
351 void dfui_progress_set_amount(struct dfui_progress
*, int);
352 int dfui_progress_get_amount(const struct dfui_progress
*);
353 void dfui_progress_set_streaming(struct dfui_progress
*, int);
354 int dfui_progress_get_streaming(const struct dfui_progress
*);
355 void dfui_progress_set_msg_line(struct dfui_progress
*, const char *);
356 const char *dfui_progress_get_msg_line(const struct dfui_progress
*);
358 void dfui_payload_free(struct dfui_payload
*);
359 char dfui_payload_get_msg_type(const struct dfui_payload
*);
360 struct dfui_form
*dfui_payload_get_form(const struct dfui_payload
*);
361 struct dfui_progress
*dfui_payload_get_progress(const struct dfui_payload
*);
367 struct dfui_connection
*dfui_connection_new(int, const char *);
368 void dfui_connection_free(struct dfui_connection
*);
371 * BACKEND VERY HIGH LEVEL INTERFACE
374 int dfui_be_present_dialog(struct dfui_connection
*,
375 const char *, const char *, const char *, ...);
378 * BACKEND HIGH LEVEL INTERFACE
380 dfui_err_t
dfui_be_start(struct dfui_connection
*);
381 dfui_err_t
dfui_be_stop(struct dfui_connection
*);
383 dfui_err_t
dfui_be_present(struct dfui_connection
*,
384 struct dfui_form
*, struct dfui_response
**);
385 dfui_err_t
dfui_be_progress_begin(struct dfui_connection
*,
386 struct dfui_progress
*);
387 dfui_err_t
dfui_be_progress_update(struct dfui_connection
*,
388 struct dfui_progress
*, int *);
389 dfui_err_t
dfui_be_progress_end(struct dfui_connection
*);
391 dfui_err_t
dfui_be_set_global_setting(struct dfui_connection
*,
392 const char *, const char *, int *);
395 * FRONTEND HIGH LEVEL INTERFACE
397 dfui_err_t
dfui_fe_connect(struct dfui_connection
*);
398 dfui_err_t
dfui_fe_disconnect(struct dfui_connection
*);
400 dfui_err_t
dfui_fe_receive(struct dfui_connection
*, char *, void **);
401 struct dfui_payload
*dfui_fe_receive_payload(struct dfui_connection
*);
402 dfui_err_t
dfui_fe_submit(struct dfui_connection
*, struct dfui_response
*);
403 dfui_err_t
dfui_fe_progress_continue(struct dfui_connection
*);
404 dfui_err_t
dfui_fe_progress_cancel(struct dfui_connection
*);
405 dfui_err_t
dfui_fe_confirm_set_global(struct dfui_connection
*);
406 dfui_err_t
dfui_fe_cancel_set_global(struct dfui_connection
*);
407 dfui_err_t
dfui_fe_confirm_stop(struct dfui_connection
*);
408 dfui_err_t
dfui_fe_abort(struct dfui_connection
*);
412 #endif /* !__DFUI_H */