Enlightenment CVS committal

Author  : mej
Project : eterm
Module  : libast

Dir     : eterm/libast/include


Modified Files:
        libast.h libast_internal.h 


Log Message:
Fri Mar  7 23:52:30 2003                        Michael Jennings (mej)

Definitely making progress on the documentation, but there's still a
long way to go.

===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/include/libast.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -3 -r1.30 -r1.31
--- libast.h    24 Feb 2003 03:03:19 -0000      1.30
+++ libast.h    8 Mar 2003 04:52:56 -0000       1.31
@@ -1225,117 +1225,347 @@
  * @ingroup DOXGRP_CONF
  */
 #define CONFIG_BUFF                     20480
-#define CONF_BEGIN_CHAR                 ((char) 1)
+
+/**
+ * Special flag character.
+ *
+ * This is the special character value passed to a config context
+ * parser when the @c begin statement for that context is
+ * encountered.
+ *
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
+#define CONF_BEGIN_CHAR                 '\001'
+/**
+ * Special flag character string.
+ *
+ * This is the string representation of CONF_BEGIN_CHAR.
+ *
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
 #define CONF_BEGIN_STRING               "\001"
-#define CONF_END_CHAR                   ((char) 2)
+/**
+ * Special flag character.
+ *
+ * This is the special character value passed to a config context
+ * parser when the @c end statement for that context is encountered.
+ *
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
+#define CONF_END_CHAR                   '\002'
+/**
+ * Special flag character string.
+ *
+ * This is the string representation of CONF_END_CHAR.
+ *
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
 #define CONF_END_STRING                 "\002"
 
+/**
+ * Compares boolean option value to allowed true values.
+ *
+ * This macro compares the value of a boolean option against the
+ * acceptable boolean "true" values ("1", "on", "yes", and "true").
+ *
+ * @param s String value of a boolean option.
+ * @return Non-zero if a match is found, zero if not.
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
 #define BOOL_OPT_ISTRUE(s)  (!strcasecmp((s), true_vals[0]) || !strcasecmp((s), 
true_vals[1]) \
                              || !strcasecmp((s), true_vals[2]) || !strcasecmp((s), 
true_vals[3]))
+/**
+ * Compares boolean option value to allowed false values.
+ *
+ * This macro compares the value of a boolean option against the
+ * acceptable boolean "false" values ("0", "off", "no", and "false").
+ *
+ * @param s String value of a boolean option.
+ * @return Non-zero if a match is found, zero if not.
+ * @see DOXGRP_CONF
+ * @ingroup DOXGRP_CONF
+ */
 #define BOOL_OPT_ISFALSE(s) (!strcasecmp((s), false_vals[0]) || !strcasecmp((s), 
false_vals[1]) \
                              || !strcasecmp((s), false_vals[2]) || !strcasecmp((s), 
false_vals[3]))
 
-/* The context table */
-#define ctx_name_to_id(the_id, n, i) do { \
-                                       for ((i)=0; (i) <= ctx_idx; (i)++) { \
-                                         if (!strcasecmp((n), context[(i)].name)) { \
-                                           (the_id) = (i); \
-                                           break; \
-                                         } \
-                                       } \
-                                       if ((i) > ctx_idx) { \
-                                         print_error("Parsing file %s, line %lu:  No 
such context \"%s\"\n", \
-                                                     file_peek_path(), 
file_peek_line(), (n)); \
-                                         (the_id) = 0; \
-                                       } \
-                                     } while (0)
-#define ctx_id_to_name(id)         (context[(id)].name)
-#define ctx_id_to_func(id)         (context[(id)].handler)
-
-/* The context state stack.  This keeps track of the current context and each 
previous one. */
-#define ctx_push(ctx)              conf_register_context_state(ctx)
-#define ctx_pop()                  (ctx_state_idx--)
-#define ctx_peek()                 (ctx_state[ctx_state_idx])
-#define ctx_peek_id()              (ctx_state[ctx_state_idx].ctx_id)
-#define ctx_peek_state()           (ctx_state[ctx_state_idx].state)
-#define ctx_peek_last_id()         
(ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].ctx_id)
-#define ctx_peek_last_state()      
(ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].state)
-#define ctx_poke_state(q)          ((ctx_state[ctx_state_idx].state) = (q))
-#define ctx_get_depth()            (ctx_state_idx)
-#define ctx_begin(idx)             do { \
-                                     char *name; \
-                                     name = get_word(idx, buff); \
-                                     ctx_name_to_id(id, name, i); \
-                                     ctx_push(id); \
-                                     state = (*ctx_id_to_func(id))(CONF_BEGIN_STRING, 
ctx_peek_last_state()); \
-                                     ctx_poke_state(state); \
-                                     FREE(name); \
-                                   } while (0)
-#define ctx_end()                  do { \
-                                     if (ctx_get_depth()) { \
-                                       state = (*ctx_id_to_func(id))(CONF_END_STRING, 
ctx_peek_state()); \
-                                       ctx_poke_state(NULL); \
-                                       ctx_pop(); \
-                                       id = ctx_peek_id(); \
-                                       ctx_poke_state(state); \
-                                       file_poke_skip(0); \
-                                     } \
-                                   } while (0)
-
-/* The file state stack */
+/**
+ * Skip-to-end flag.
+ *
+ * This symbol represents the bit in the FSS flags which specifies
+ * that the parser should skip the rest of the file.
+ *
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define FILE_SKIP_TO_END           (0x01)
+/**
+ * Preprocessing flag.
+ *
+ * This symbol represents the bit in the FSS flags which specifies
+ * that this file should be preprocessed.
+ *
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define FILE_PREPROC               (0x02)
+/**
+ * Push info for a new file onto the state stack.
+ *
+ * This macro adds a new file state structure to the top of the stack
+ * and populates it with the information contained in the macro
+ * parameters.  When a new file is opened for parsing, a call is made
+ * to this macro to "push" the new file onto the top of the stack.
+ *
+ * @param f  The file pointer (FILE *) representing the newly-opened
+ *           file.
+ * @param p  The path to the newly-opened file.
+ * @param o  The output file name (for preprocessing).
+ * @param l  The current line number for the file.
+ * @param fl The flag set for the file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_push(f, p, o, l, fl)  conf_register_fstate(f, p, o, l, fl)
+/**
+ * Pop a state structure off the stack.
+ *
+ * This macro pops a file state structure off the top of the stack.  A
+ * call to this macro occurs once the parsing of the current file is
+ * completed.
+ *
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_pop()                 (fstate_idx--)
+/**
+ * Return the top file state structure on the stack.
+ *
+ * This macro is used to access the file state structure currently on
+ * top of the stack.
+ *
+ * @return The file state structure atop the stack.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek()                (fstate[fstate_idx])
+/**
+ * Examine the file pointer on top of the stack.
+ *
+ * This macro returns the file pointer (FILE *) corresponding to the
+ * file currently being parsed.
+ *
+ * @return The current file pointer.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_fp()             (fstate[fstate_idx].fp)
+/**
+ * Examine the path of the current file.
+ *
+ * This macro returns the path for the file currently being parsed.
+ *
+ * @return The path of the current file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_path()           (fstate[fstate_idx].path)
+/**
+ * Examine the path of the current pre-processing output file.
+ *
+ * This macro returns the path for the preprocessing output file
+ * currently being parsed.
+ *
+ * @return The path of the current preproc output file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_outfile()        (fstate[fstate_idx].outfile)
+/**
+ * Examine the line number of the current file.
+ *
+ * This macro returns the current line number within the current
+ * config file.
+ *
+ * @return The line number of the current file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_line()           (fstate[fstate_idx].line)
+/**
+ * Check whether or not we're skipping to the end of the current
+ * file.
+ *
+ * This macro returns zero if the current file is being parsed and
+ * non-zero if the parser is skipping to its end.
+ *
+ * @return The skip-to-end flag for the current file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_skip()           (fstate[fstate_idx].flags & FILE_SKIP_TO_END)
+/**
+ * Check whether or not the current file was preprocessed.
+ *
+ * This macro returns zero if the current file was not preprocessed
+ * and non-zero if it was.
+ *
+ * @return The preprocessing flag for the current file.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_peek_preproc()        (fstate[fstate_idx].flags & FILE_PREPROC)
 
+/**
+ * Set the file pointer for the current file.
+ *
+ * @internal
+ * @param f The file pointer (FILE *).
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_fp(f)            ((fstate[fstate_idx].fp) = (f))
+/**
+ * Set the path for the current file.
+ *
+ * @internal
+ * @param p The path.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_path(p)          ((fstate[fstate_idx].path) = (p))
+/**
+ * Set the outfile for the current file.
+ *
+ * @internal
+ * @param o The outfile.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_outfile(o)       ((fstate[fstate_idx].outfile) = (o))
+/**
+ * Set the current line number for the current file.
+ *
+ * @internal
+ * @param l The line number.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_line(l)          ((fstate[fstate_idx].line) = (l))
+/**
+ * Set the skip-to-end flag for the current file.
+ *
+ * @internal
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_skip_to_end()         ((fstate[fstate_idx].flags) |= (FILE_SKIP_TO_END))
+/**
+ * Set/clear the skip-to-end flag for the current file.
+ *
+ * @internal
+ * @param s 0 to clear, non-zero to set.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_skip(s)          do {if (s) {fstate[fstate_idx].flags |= 
FILE_SKIP_TO_END;} else {fstate[fstate_idx].flags &= ~(FILE_SKIP_TO_END);} } while (0)
+/**
+ * Set/clear the preprocessing flag for the current file.
+ *
+ * @internal
+ * @param s 0 to clear, non-zero to set.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke_preproc(s)       do {if (s) {fstate[fstate_idx].flags |= 
FILE_PREPROC;} else {fstate[fstate_idx].flags &= ~(FILE_PREPROC);} } while (0)
+/**
+ * Set all state info for the current file.
+ *
+ * @internal
+ * @param f  The file pointer (FILE *).
+ * @param p  The file path.
+ * @param o  The outfile.
+ * @param l  The line number.
+ * @param fl The flags.
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_poke(f, p, o, l, fl)  do {file_poke_fp(f); file_poke_path(p); 
file_poke_outfile(o); file_poke_line(l); fstate[fstate_idx].flags = (fl);} while (0)
 
+/**
+ * Increment the line number for the current file.
+ *
+ * @internal
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 #define file_inc_line()            (fstate[fstate_idx].line++)
 
-/* Contexts */
-typedef void * (*ctx_handler_t)(char *, void *);
-typedef struct context_struct {
-  char *name;
-  ctx_handler_t handler;
-} ctx_t;
-typedef struct ctx_state_struct {
-  unsigned char ctx_id;
-  void *state;
-} ctx_state_t;
-
-/* Parser states */
+/**
+ * File state stack structure.
+ *
+ * This structure comprises the individual stack elements on the file
+ * state stack.  One of these structures is present on the stack for
+ * each file being parsed.
+ *
+ * @see DOXGRP_CONF_FSS
+ * @ingroup DOXGRP_CONF_FSS
+ */
 typedef struct file_state_struct {
-  FILE *fp;
-  char *path, *outfile;
-  unsigned long line;
-  unsigned char flags;
+    /**
+     * File pointer.
+     *
+     * Contains an open file pointer used to read data from the
+     * file.
+     */
+    FILE *fp;
+    /**
+     * File path.
+     *
+     * Contains the path to the file.
+     */
+    char *path;
+    /**
+     * Preprocessing output file.
+     *
+     * Contains the path to the file used for preprocessing
+     * output.
+     */
+    char *outfile;
+    /**
+     * Line number.
+     *
+     * Contains the current line number for the file.
+     */
+    unsigned long line;
+    /**
+     * File state flags.
+     *
+     * Contains the skip-to-end (FILE_SKIP_TO_END) and preprocessing
+     * (FILE_PREPROC) flags for the file.
+     */
+    unsigned char flags;
 } fstate_t;
 
-/* Built-in functions */
-typedef char * (*conf_func_ptr_t) (char *);
-typedef struct conf_func_struct {
-  char *name;
-  conf_func_ptr_t ptr;
-} conf_func_t;
-
-typedef struct conf_var_struct {
-  char *var, *value;
-  struct conf_var_struct *next;
-} conf_var_t;
+/**
+ * Typedef for pointers to context handler functions.
+ *
+ * This function pointer type is used for variables, typecasts,
+ * etc. involving context handler functions.  Context handlers must
+ * accept two parameters, a char * containing either the config file
+ * line or a begin/end magic string, and a void * containing state
+ * information; they must return a void * which will be passed to the
+ * next invocation of the handler as the aforementioned state
+ * information parameter.
+ *
+ * @see DOXGRP_CONF_CTX
+ * @ingroup DOXGRP_CONF_CTX
+ */
+typedef void * (*ctx_handler_t)(char *, void *);
 
 extern fstate_t *fstate;
 extern unsigned char fstate_idx;
@@ -1359,9 +1589,9 @@
 #define SPIFOPT_FLAG_DEPRECATED           (1UL << 9)
 
 /* Flags that control the parser's behavior */
-#define SPIFOPT_SETTING_POSTPARSE          (1UL << 0)
+#define SPIFOPT_SETTING_POSTPARSE         (1UL << 0)
 
-#define SPIFOPT_OPTION(s, l, d, f, p, m)  { s, l, d,                                  
           (f), &(p), m }
+#define SPIFOPT_OPTION(s, l, d, f, p, m)  { s, l, d,                                  
           (f),  (p), m }
 #define SPIFOPT_BOOL(s, l, d, v, m)       { s, l, d,                          
(SPIFOPT_FLAG_BOOLEAN), &(v), m }
 #define SPIFOPT_BOOL_PP(s, l, d, v, m)    { s, l, d,  (SPIFOPT_FLAG_BOOLEAN | 
SPIFOPT_FLAG_PREPARSE), &(v), m }
 #define SPIFOPT_BOOL_LONG(l, d, v, m)     { 0, l, d,                          
(SPIFOPT_FLAG_BOOLEAN), &(v), m }
@@ -1418,24 +1648,155 @@
 #define SPIFOPT_HELPHANDLER               ((spifopt_settings.help_handler) ? 
(spifopt_settings.help_handler) : (spifopt_usage))
 #define SPIFOPT_HELPHANDLER_SET(f)        (spifopt_settings.help_handler = (f))
 
+/**
+ * Typedef for help handler function.
+ *
+ * This type is used for declaring/typecasting function pointers which
+ * will be used for help handlers.  Functions used for this should be
+ * declared as returning void (and in reality does not return at all)
+ * and should take either no parameters, or a single char * parameter.
+ *
+ * @see DOXGRP_OPT, SPIFOPT_HELPHANDLER_SET()
+ * @ingroup DOXGRP_OPT
+ */
 typedef void (*spifopt_helphandler_t)();
+/**
+ * Typedef for abstract option handler function.
+ *
+ * This type is used for declaring/typecasting function pointers which
+ * will be used for abstract option handlers.  Abstract options are
+ * those which require special handling; LibAST implements this by
+ * allowing for an arbitrary user-specified function be invoked when
+ * such an option is encountered.  Functions used for this should be
+ * declared as returning void and should take a single char *
+ * parameter (the value of the option, or NULL if it had no value).
+ *
+ * @see DOXGRP_OPT
+ * @ingroup DOXGRP_OPT
+ */
 typedef void (*spifopt_abstract_handler_t)(char *);
 
+/**
+ * Option structure.
+ *
+ * This is the structure that holds the data for each of the command
+ * line options for which the parser will be looking.  Client programs
+ * must create an array of these structures (a spifopt_t []) and use
+ * the SPIFOPT_OPTLIST_SET() macro to tell LibAST which variable it
+ * is.
+ *
+ * @note This structure and its members should NEVER be accessed
+ * directly; they are documented solely for informational purposes.
+ * The SPIFOPT_* convenience macros provide a streamlined, easy-to-use
+ * abstraction layer for declaring the option list, setting option
+ * parser parameters, and so forth.  Even the internal code uses these
+ * macros!  Consult the macro documentation and the example code for
+ * further assistance.
+ *
+ * @see DOXGRP_OPT, @link opt_example.c example code @endlink
+ * @ingroup DOXGRP_OPT
+ */
 typedef struct spifopt_t_struct {
+    /**
+     * Short option.
+     *
+     * The short (one char) form of the option.
+     */
     spif_char_t short_opt;
+    /**
+     * Long option.
+     *
+     * The long (string) form of the option.
+     */
     spif_charptr_t long_opt;
+    /**
+     * Description.
+     *
+     * The (brief) description of the option for the help screen.
+     */
     spif_charptr_t desc;
+    /**
+     * Option type/attribute flags.
+     *
+     * The type and attribute flags for this option.
+     */
     spif_uint32_t flags;
+    /**
+     * Value pointer.
+     *
+     * A pointer to where the value for this option should be stored.
+     * Its exact type, and how it is interpreted, depends on the type
+     * of option being defined.
+     */
     void *value;
+    /**
+     * Boolean bitmask.
+     *
+     * For boolean options, this is the bitmask for the option.  For
+     * other option types, it has no meaning.
+     */
     spif_uint32_t mask;
 } spifopt_t;
 
+/**
+ * Option parser settings structure.
+ *
+ * This is the structure that holds the settings and other internal
+ * variables which control how the options parser functions.
+ *
+ * @note This structure and its members should NEVER be accessed
+ * directly; they are documented solely for informational purposes.
+ * The SPIFOPT_* convenience macros provide a streamlined, easy-to-use
+ * abstraction layer for declaring the option list, setting option
+ * parser parameters, and so forth.  Even the internal code uses these
+ * macros!  Consult the macro documentation and the example code for
+ * further assistance.
+ *
+ * @see DOXGRP_OPT, @link opt_example.c example code @endlink
+ * @ingroup DOXGRP_OPT
+ */
 typedef struct spifopt_settings_t_struct {
+    /**
+     * Options list.
+     *
+     * The array of option structures defining the options to look
+     * for.
+     */
     spifopt_t *opt_list;
+    /**
+     * Option count.
+     *
+     * The total number of options in the options list.
+     */
     spif_uint16_t num_opts;
+    /**
+     * Parser flags.
+     *
+     * Flags which control the behavior of the parser.
+     */
     spif_uint32_t flags;
-    spif_uint8_t bad_opts, allow_bad;
-    spif_uint8_t indent;
+    /**
+     * Bad option count.
+     *
+     * Keeps track of the number of bad options (i.e., option syntax
+     * errors, such as missing values or unknown options)
+     * encountered.
+     */
+    spif_uint8_t bad_opts;
+    /**
+     * Bad option limit.
+     *
+     * The maximum number of bad options allowed before giving up and
+     * displaying the help text.
+     */
+    spif_uint8_t allow_bad;
+    spif_uint8_t indent; /**< Unused. */
+    /**
+     * Help handler.
+     *
+     * Pointer to the function which is responsible for displaying the
+     * help text.  If undefined, spifopt_usage() is used.
+     */
     spifopt_helphandler_t help_handler;
 } spifopt_settings_t;
 
===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/include/libast_internal.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- libast_internal.h   19 Feb 2003 21:10:20 -0000      1.10
+++ libast_internal.h   8 Mar 2003 04:52:56 -0000       1.11
@@ -65,16 +65,88 @@
 
 
 
+/******************************** CONF GOOP ***********************************/
+/* The context table */
+#define ctx_name_to_id(the_id, n, i) do { \
+                                       for ((i)=0; (i) <= ctx_idx; (i)++) { \
+                                         if (!strcasecmp((n), context[(i)].name)) { \
+                                           (the_id) = (i); \
+                                           break; \
+                                         } \
+                                       } \
+                                       if ((i) > ctx_idx) { \
+                                         print_error("Parsing file %s, line %lu:  No 
such context \"%s\"\n", \
+                                                     file_peek_path(), 
file_peek_line(), (n)); \
+                                         (the_id) = 0; \
+                                       } \
+                                     } while (0)
+#define ctx_id_to_name(id)         (context[(id)].name)
+#define ctx_id_to_func(id)         (context[(id)].handler)
+
+/* The context state stack.  This keeps track of the current context and each 
previous one. */
+#define ctx_push(ctx)              conf_register_context_state(ctx)
+#define ctx_pop()                  (ctx_state_idx--)
+#define ctx_peek()                 (ctx_state[ctx_state_idx])
+#define ctx_peek_id()              (ctx_state[ctx_state_idx].ctx_id)
+#define ctx_peek_state()           (ctx_state[ctx_state_idx].state)
+#define ctx_peek_last_id()         
(ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].ctx_id)
+#define ctx_peek_last_state()      
(ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].state)
+#define ctx_poke_state(q)          ((ctx_state[ctx_state_idx].state) = (q))
+#define ctx_get_depth()            (ctx_state_idx)
+#define ctx_begin(idx)             do { \
+                                     char *name; \
+                                     name = get_word(idx, buff); \
+                                     ctx_name_to_id(id, name, i); \
+                                     ctx_push(id); \
+                                     state = (*ctx_id_to_func(id))(CONF_BEGIN_STRING, 
ctx_peek_last_state()); \
+                                     ctx_poke_state(state); \
+                                     FREE(name); \
+                                   } while (0)
+#define ctx_end()                  do { \
+                                     if (ctx_get_depth()) { \
+                                       state = (*ctx_id_to_func(id))(CONF_END_STRING, 
ctx_peek_state()); \
+                                       ctx_poke_state(NULL); \
+                                       ctx_pop(); \
+                                       id = ctx_peek_id(); \
+                                       ctx_poke_state(state); \
+                                       file_poke_skip(0); \
+                                     } \
+                                   } while (0)
+
+typedef struct context_struct {
+  char *name;
+  ctx_handler_t handler;
+} ctx_t;
+
+typedef struct ctx_state_struct {
+  unsigned char ctx_id;
+  void *state;
+} ctx_state_t;
+
+/* Built-in functions */
+typedef char * (*conf_func_ptr_t) (char *);
+typedef struct conf_func_struct {
+  char *name;
+  conf_func_ptr_t ptr;
+} conf_func_t;
+
+typedef struct conf_var_struct {
+  char *var, *value;
+  struct conf_var_struct *next;
+} conf_var_t;
+
+
+
 /******************************* OPTIONS GOOP **********************************/
 
 #define CHECK_BAD()  do { \
                        SPIFOPT_BADOPTS_SET(SPIFOPT_BADOPTS_GET() + 1); \
-                      if (SPIFOPT_BADOPTS_GET() >= SPIFOPT_ALLOWBAD_GET()) { \
-                        print_error("Error threshold exceeded, giving up.\n"); \
-                        SPIFOPT_HELPHANDLER(); \
-                      } else { \
-                        print_error("Attempting to continue, but strange things may 
happen.\n"); \
-                      } \
+                       if (SPIFOPT_BADOPTS_GET() >= SPIFOPT_ALLOWBAD_GET()) { \
+                         print_error("Error threshold exceeded, giving up.\n"); \
+                         SPIFOPT_HELPHANDLER(); \
+                       } else { \
+                         print_error("Attempting to continue, but strange things may 
happen.\n"); \
+                       } \
                      } while(0)
 
 




-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger 
for complex code. Debugging C/C++ programs can leave you feeling lost and 
disoriented. TotalView can help you find your way. Available on major UNIX 
and Linux platforms. Try it free. www.etnus.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to