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);