/* $Id: shared_imp.h,v 1.21 2006/06/29 17:26:41 hurtta Exp $ */

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

#include "../shared_libs/include/shared.h"

extern struct shared_CT {
    struct connection_type *T;
    struct ImpInfo * imp_idx;
}          * shared_connection_types;
extern int   shared_connection_type_count;

extern struct shared_FT {
    struct folder_type * T;
    struct ImpInfo * imp_idx;
}          * shared_folder_types;
extern int   shared_folder_type_count;

extern struct shared_ST {
    struct stream_type * T;
    struct ImpInfo * imp_idx;
}          * shared_stream_types;
extern int   shared_stream_type_count;

extern struct shared_SEOT {
  struct SE_option_type * T;
  struct ImpInfo * imp_idx;
}          * shared_SE_option_types;
extern int   shared_SE_option_type_count;

extern struct shared_CST {
   struct  charset_type       * T;
   struct ImpInfo * imp_idx;
 }          * shared_CS_types;
extern int    shared_CS_type_count;

extern struct  charset_type * find_shared_CS_type P_((const char *val));

extern int cs_auto_charset P_((const char *name,
			       struct  charset_type **type,
			       struct  map_info **map));

extern int verify_shared_index P_((struct ImpInfo *i));

extern struct shared_MCF {
  struct mailer_config * T;
  struct ImpInfo       * imp_idx;
}        * shared_MCF_types;
extern int shared_MCF_type_count;

struct ImpInfo {
    int valid;
    char * tag;
    char * shname;
    int base_lists_updated;

    void * handle;

    struct reg_list {
	struct dt_shared_info *var;
	int valid;
	
	int updated;
	union {
	    void * dummy;
	    
	    struct sl_base_data    * base;
	    struct sl_connect_data * connect;
	    struct sl_mailer_data  * mailer;
	    struct sl_mbox_data    * mbox;
	} r;
    }                        * regs;
    int                      regs_count;

    struct rc_save_info_rec * rc_options;
    int                       rc_option_count;

    RC_post_init_f          * rc_post_init;
    wants_rand_bits_f       * wants_rand_bits;

};

/* zero cell of array */
typedef void sl_zero_reg_list P_((struct dt_shared_info *var,
				  struct reg_list *r));



typedef int sl_reg_functions P_((struct ImpInfo *i,
				 int reg_idx));
typedef void sl_unreg_functions P_((struct ImpInfo *i,
				    int reg_idx));

#define SHARED_LOADER_magic     0xF900

struct  shared_loader {
    uint16            magic;      

    sl_reg_functions  *func_reg;
    sl_zero_reg_list    *func_zero;
    sl_unreg_functions  *func_unreg;
};

extern void load_shared_libs1 P_((struct dt_shared_info *var));
extern int give_rnum P_((struct ImpInfo * I, struct dt_shared_info *var));

extern struct ImpInfo **library_list;
extern int              library_list_count;

extern struct ImpInfo * give_impinfo P_((const char * tag));
extern int reg_code1 P_((struct ImpInfo *I, int r));
extern void load_shared_libs P_((void));
extern int tag_ok P_((CONST char *name));
extern void load_code0 P_((struct ImpInfo *I));
extern void register_list P_((SHAREDLIB *Z));


extern void register_hidden_library P_((struct dt_shared_info *parent,
					struct dt_shared_info *lib));


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




syntax highlighted by Code2HTML, v. 0.9.1