/* $Id: misclib.h,v 1.8 2006/09/15 19:56:31 hurtta Exp $ */

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.8 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
 *      or  Kari Hurtta <elm@elmme-mailer.org>
 *****************************************************************************/

/* lib/misc/init.c */

extern struct terminal_map_item * system_terminal_map;
extern struct terminal_map_item * user_terminal_map;
extern struct mime_types_item   * system_mimetypes_map;
extern struct mime_types_item   * user_mimetypes_map;

extern void init_misclib P_((void));

/* lib/misc/terminal.c */

/* May be called from signal handler -- on that situation use
   buffer specified as argument -- otherwise result is malloced
*/
extern char * terminal_set_title P_((char *terminal,
				     char *window_title,
				     char *icon_title,
				     char * buffer,
				     int size));
extern struct terminal_map_item  * load_terminal_map P_((const char *filename, 
							 int *errors));
extern void terminal_can_switch P_((const char *terminal,
				    charset_t *storage,
				    int *n,
				    int max));			   

extern int terminal_can_switch_to P_((const char *terminal, charset_t set, 
				      int silent));

extern void dump_terminal_map P_((FILE *f, struct terminal_map_item *map));

extern void terminal_change_system_charset P_((char *terminal));

extern char * terminal_set_info P_((char *terminal,
				    charset_t set,
				    screen_info_p terminal_info));

/* May be called from signal handler -- on that situation use
   buffer specified as argument -- otherwise result is malloced
   
   -- terminal_info must be alloced with create_terminal_info()
      beforehand
*/
extern char * terminal_switch_to P_((char *terminal, charset_t set,
				     screen_info_p terminal_info,
				     char * buffer, int size,
				     int silent));

extern void change_terminal_map P_((struct terminal_map_item **map,
				    struct terminal_map_item *new));

extern void free_terminal_map P_((struct terminal_map_item **map));

/* lib/misc/mediatype.c */

enum mime_major_type {      
    MIME_TYPE_LEAF       = -1 /* Only avaliable for register_mt_defhandler */,

    MIME_TYPE_UNKNOWN	     = 0,   
    MIME_TYPE_APPLICATION    = 1,
    MIME_TYPE_AUDIO	     = 2,
    MIME_TYPE_IMAGE	     = 3,
    MIME_TYPE_MESSAGE	     = 4,
    MIME_TYPE_MULTIPART	     = 5,
    MIME_TYPE_TEXT	     = 6,
    MIME_TYPE_VIDEO          = 7    
};

typedef struct media_type *  media_type_t;

/* WARNING: May return codes > MIME_TYPE_VIDEO if unknow or bad type */
extern enum mime_major_type get_major_type_code P_((media_type_t T));
extern CONST char *         get_major_type_name P_((media_type_t T));
extern CONST char *         get_major_type_name2 P_((enum mime_major_type m));

#define MIME_RFC822      1
#define MIME_MIXED       2
#define MIME_DIGEST      4
#define MIME_ALTERNATIVE 8
#define MIME_SIGNED      16
#define MIME_ENCRYPTED   32
#define MIME_PARTIAL     64       /* Message fragment */

extern int                  get_type_flags       P_((media_type_t T));
extern CONST char *         get_subtype_name     P_((media_type_t T));

extern enum mime_major_type give_major_type P_(( const char * major,
						 int create));

extern media_type_t give_media_type P_(( const char * major,
					 const char * minor,
					 int create));

extern media_type_t give_media_type2 P_((enum mime_major_type major_type_code,
					 const char * minor,
					 int create));

extern int give_text_type_code P_((media_type_t T));

enum  mt_handle_type { handle_pager,
		       handle_mime_parser,
		       handle_mailcap_entry,
		       handle_ANY = -1
};

struct media_type_handle {
    enum  mt_handle_type type;
    union mt_handles {
	void                       *any;
	struct  mt_handle_pager    *pager;
	struct mailcap_entry       *mailcap;
	struct mime_parser         *parser_code;
	
    } p;
};

struct COMPAT_media_type_handle {
    enum  mt_handle_type type;
    void                       *any;
};


extern void register_mt_handler P_((media_type_t T,
				    struct media_type_handle *H));
extern void register_mt_defhandler P_((int major_type_code,
				       struct media_type_handle *H));

extern int walk_mt_handler P_((media_type_t T,
			       struct media_type_handle **H,
			       int *is_default,
			       enum  mt_handle_type kind
			       ));


/* lib/misc/mime_types.c */

extern struct mime_types_item  * builtin_mimetypes_map;

extern struct mime_types_item  * load_mime_types_map P_((const char *filename, 
							 int *errors)); 
extern struct mime_types_item * loc_mime_type P_((struct mime_types_item *list,
						  char *extension));
extern media_type_t mime_type_to_media_type P_((const struct mime_types_item 
						*item));
extern CONST char * mime_type_to_params P_((const struct mime_types_item *item,
					    charset_t *cs));
extern CONST char * mime_type_to_extension P_((struct mime_types_item *item));

extern void dump_mime_types_map P_((FILE *f,
				    struct mime_types_item  *map));

extern struct scan_list * get_scan_list P_((struct mime_types_item *list,
					    char *extension));

extern void free_scan_list P_((struct scan_list **list));

extern void append_scanlist P_((struct scan_list *list,
				struct scan_list *other));

extern int scanlist_need_more P_((struct scan_list *list, int ch));
extern struct mime_types_item * loc_mime_type_from_scan P_((struct scan_list 
							    *list));
extern struct mime_types_item * loc_mime_type_from_scan_extension
   P_((struct scan_list *list, char *extension));

extern void change_mime_types_map P_((struct mime_types_item **map,
				      struct mime_types_item *new));
extern void free_mime_types_map P_((struct mime_types_item **map));

extern struct scan_list * get_scan_list_by_type P_((struct mime_types_item 
						    *list,
						    media_type_t mime_type));

/* Returns 1 is list is not empty */
extern int have_scanlist P_((struct scan_list *list));

typedef int filter_scanlist_OK_f P_((const mime_t * att, 
				     const struct mime_types_item *type_item));

void filter_scanlist P_((struct scan_list *list, const mime_t * att,
			 filter_scanlist_OK_f filter));

/* lib/misc/charset.c */

extern void dump_by_MIBenum P_((FILE *f));
extern void dump_charset_map P_((FILE *f, struct charset_map_item *map));

extern void change_charset_map P_((struct charset_map_item **map,
				   struct charset_map_item *new));
extern void free_charset_map P_((struct charset_map_item **map));


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



syntax highlighted by Code2HTML, v. 0.9.1