/* $Id: rc_imp.h,v 1.19 2006/04/09 07:37:05 hurtta Exp $ */

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.19 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI> (was hurtta+elm@ozone.FMI.FI)
 *****************************************************************************/

#if ANSI_C
struct rc_save_info_rec;
#endif

/* Returns 0 on error
           1 if parsed OK
*/
typedef int rc_parse_line P_((struct rc_save_info_rec *r,
			      int lcl,
			      char *value, int lineno, char *filename,
			      int negate));
typedef int rc_parse_cline P_((struct rc_save_info_rec *r,
			       int lcl,
			       char *value, int lineno, char *filename));

typedef void rc_print_value P_((FILE *F,
				struct rc_save_info_rec *r,
				int comment));

/* Returns pointer to static buffer */
typedef char * rc_get_value P_((struct rc_save_info_rec *r));

#define RCTYPE_magic            0xF402

extern struct rc_type {
    unsigned short magic;                      /* RCTYPE_magic */


    rc_parse_line      * parse_line;            /* Parse line */
    rc_parse_cline     * parse_cline;           /* Parse continuation line */
    rc_print_value     * print_value;
    rc_get_value       * get_value;

} rc_DT_SYN, rc_DT_STR, rc_DT_NUM, rc_DT_BOL,
    rc_DT_CHR, rc_DT_SORT,
    rc_DT_MLT,  rc_DT_PRM, rc_DT_FUNC,
    rc_DT_LONG, rc_DT_PATH, rc_DT_OBS, rc_DT_ESTR,
    rc_DT_ENUM, rc_DT_DELAY;

extern int valid_rc_type P_((struct rc_type *T));

#ifdef USE_PGP
extern struct rc_type rc_DT_PGPVER;
#endif
#ifdef USE_DLOPEN
extern struct rc_type rc_DT_SHARED;
#endif

#define DT_SYN      &rc_DT_SYN    /* synonym entry (old name) */
#define DT_STR      &rc_DT_STR    /* string */
#define DT_NUM      &rc_DT_NUM    /* number */
#define DT_BOL      &rc_DT_BOL    /* ON/OFF (boolean) */
#define DT_WEE      &rc_DT_WEE    /* weed list */
#define DT_MLT      &rc_DT_MLT    /* multiple destinations for data */
#define DT_PRM      &rc_DT_PRM   /* file permissions */
#define DT_FUNC     &rc_DT_FUNC  /* function to be called for process option */
#define DT_LONG     &rc_DT_LONG    /* number */
#ifdef USE_PGP
#define DT_PGPVER   &rc_DT_PGPVER    /* enum pgp_version */
#endif

/* read_rc.c. -- return NULL on failure 
                 otherwise pointer to option
*/
extern struct rc_save_info_rec  * do_set P_((int lcl, char *word1, 
					     char *word2, char *filename));
extern int is_it_on P_((char *word));
extern void weedout P_((char *string)); 
extern char * mode_to_str P_((int mode));

extern int expand_dt_path P_((struct dt_path_info *ptr, char *fieldname, 
			      char *val, int recursive));

extern int expand_dt_estr P_((struct dt_estr_info *ptr,
			     char *fieldname,
			     char *val));


extern void mark_XX P_((struct rc_save_info_rec *x));

#ifdef USE_DLOPEN
extern void mark_shared_changed P_((void *A));
extern void mark_fshared_changed P_((option_func *A));
#endif

extern void register_delayed P_((struct rc_save_info_rec * rc_options,
				 int rc_option_count));
extern int rc_eval_tail P_((struct rc_save_info_rec *ret,int lcl, char *value,
			    int lineno, char *filename, int negate));

extern void  mark_delayed_changed P_((void *A));
extern void  mark_fdelayed_changed P_((option_func *A));

/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1