 typedef struct {
    Strip suffix;
    Strip file;
    char **mime_types;
    float *prefs;
    int nrtypes;
     int  (*init)(char ***mime_types, int *nrtypes, float **prefs);
     int  (*open)(const W3ADocumentInfo,  Widget , long);
    int (*write)(long, const char *buf, size_t nbytes);
     int  (*close)(long);
     int  (*info)(long, W3ADocumentInfo *);
    void (*event)(long id, long sourceid, long eventtype, void *params);
} Viewer;
 typedef struct {
    Strip suffix;
    Strip file;
    char **protocols;
    int nrprotocols;
     int  (*init)(char ***protocols, int *nrprotocols);
    int (*open)(const char *, int, int, const char *);
    int (*done)(int);
    int (*peek)(int);
    int (*read)(int, char *, size_t);
    int (*write)(int, const char *, size_t);
     int  (*close)(int);
     int  (*delete)(const char *);
     int  (*info)(int, W3ADocumentInfo *);
} Agent;
 typedef struct {
    Strip suffix;
    Strip file;
    char **from;
    char **to;
    float *prefs;
    int nrfromto;
     int  (*init)(char ***from, char ***to, int *nrfromto, float **prefs);
     int  (*open)(const char *, const char *, const char *, const char *, long);
    int (*write)(long, const char *, size_t);
    int (*read)(long, char *, size_t);
     int  (*close)(long);
} Filter;
 typedef struct {
    Strip suffix;
    Strip file;





     int  (*init)(long, char ***, ThreeIcons *icons_data[], int *);
     int  (*doit)(int, int, int);
    void (*event)(long sourceid, long eventtype, void *params);
    long id;
} UserFunction;
 typedef struct {
    Strip suffix;
    Strip file;
    char **mime_types;
    int nrtypes;
     int  (*init)(char ***mime_types, int *nrtypes);
     int  (*open)(const W3ADocumentInfo, long);
    int (*write)(long, const char *, size_t);
     int  (*close)(long);
} Printer;
 Viewer *viewers ;
 Agent *agents ;
 Filter *filters ;
 UserFunction *userfns ;
 Printer *printers ;
 int nragents ;
 int nrfilters ;
 int nrfunctions ;
 int nrprinters ;
 int nrviewers ;
 void read_config(const char *file);
