Driver interface When writing a new driver for the c-client, you must provide a DRIVER stucture giving a dispatch vector between MAIL and the driver. The DRIVER dispatch vector is described in mail.h. char *name; Name by which the driver is known to c-client. unsigned long flags; Attribute flags for this driver: DR_DISABLE This driver is currently disabled. DR_LOCAL This driver deals with local mailboxes; if this is off it deals with mailboxes over a network. DR_MAIL This driver supports e-mail messages. DR_NEWS This driver supports netnews messages DR_READONLY This driver only allows read-only access; mail_setflag(), mail_expunge(), etc. are no-ops. DR_NOFAST This driver does not implement mail_fetchfast() in a fast way (e.g. it may have to fetch the entire message text over a network to calculate sizes). DR_NAMESPACE This driver accepts and uses namespace format names. DR_LOWMEM This driver is designed for systems with very limited amounts of memory (e.g. DOS) and support routines called by this driver should try not to use much memory. DRIVER *next; Pointer to the next driver which this application supports (or NIL if this is the last driver). Drivers are lunk together via the mail_link() function. DRIVER *driver_valid (char *mailbox); This function returns a pointer to the driver's DRIVER dispatch vector iff this driver accepts the given name as a valid mailbox for this driver. Otherwise, it returns the value of the next driver's driver_valid() or NIL if there is no next driver. In other words, calling driver_valid() for the first driver will return the driver dispatch vector for the driver which supports this type of mailbox. void *driver_parameters (long function,void *value); This function implements mail_parameters() for this driver. void driver_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents); This function implements mail_scan() for this driver. void driver_list (MAILSTREAM *stream,char *ref,char *pat); This function implements mail_list() for this driver. void driver_lsub (MAILSTREAM *stream,char *ref,char *pat); This function implements mail_lsub() for this driver. long driver_subscribe (MAILSTREAM *stream,char *mailbox); This function implements mail_subscribe() for this driver. long driver_unsubscribe (MAILSTREAM *stream,char *mailbox); This function implements mail_unsubscribe() for this driver. long driver_create (MAILSTREAM *stream,char *mailbox); This function implements mail_create() for this driver. long driver_delete (MAILSTREAM *stream,char *mailbox); This function implements mail_delete() for this driver. long driver_rename (MAILSTREAM *stream,char *old,char *new); This function implements mail_rename() for this driver. long driver_status (MAILSTREAM *stream,char *mailbox,long flags); This function implements mail_status() for this driver. MAILSTREAM *driver_open (MAILSTREAM *stream); This function opens the mailbox identified by the given stream. It may use the data on the stream and create additional data on stream->local as necessary. It should return the given stream unless it failed to open the mailbox, in which case it should return NIL. void driver_close (MAILSTREAM *stream,long options); This function implements mail_close() for this driver. void driver_fetchfast (MAILSTREAM *stream,char *sequence,long flags); This function implements mail_fetchfast() for this driver. void driver_fetchflags (MAILSTREAM *stream,char *sequence,long flags); This function implements mail_fetchflags() for this driver. ENVELOPE *driver_fetchstructure (MAILSTREAM *stream,unsigned long msgno, BODY **body,long flags); This function implements mail_fetchstructure() for this driver. char *driver_fetchheader (MAILSTREAM *stream,unsigned long msgno, STRINGLIST *lines,unsigned long *len,long flags); This function implements mail_fetchheader() for this driver. char *driver_fetchtext (MAILSTREAM *stream,unsigned long msgno, unsigned long *len,long flags); This function implements mail_fetchtext() for this driver. char *driver_fetchbody (MAILSTREAM *stream,unsigned long msgno,char *section, unsigned long *len,long flags); This function implements mail_fetchbody() for this driver. void driver_setflag (MAILSTREAM *stream,char *sequence,char *flag,long flags); This function implements mail_setflag() for this driver. void driver_clearflag (MAILSTREAM *stream,char *sequence,char *flag, long flags); This function implements mail_clearflag() for this driver. void driver_search (MAILSTREAM *stream,char *charset,SEARCHPGM *pgm, long flags); This function implements mail_search() for this driver. unsigned long *driver_sort (MAILSTREAM *stream,char *charset,SEARCHPGM *spg, SORTPGM *pgm,long flags); This function implements mail_sort() for this driver. void *driver_thread (MAILSTREAM *stream,char *seq,long function,long flag); This dispatch is reserved for a future threading capability. long driver_ping (MAILSTREAM *stream); This function implements mail_ping() for this driver. void driver_check (MAILSTREAM *stream); This function implements mail_check() for this driver. void driver_expunge (MAILSTREAM *stream); This function implements mail_expunge() for this driver. long driver_copy (MAILSTREAM *stream,char *sequence,char *mailbox, long options); This function implements mail_copy() for this driver. long driver_append (MAILSTREAM *stream,char *mailbox,char *flags,char *date, STRING *message); This function implements mail_append() for this driver. void driver_gc (MAILSTREAM *stream,long gcflags); This function implements mail_gc() for this driver.