typedef struct Map Map; typedef struct Mapel Mapel; typedef struct Sub Sub; typedef struct Wdoc Wdoc; typedef struct Whist Whist; typedef struct Wpage Wpage; enum { Tcache = 5, /* seconds */ Maxmap = 10*1024*1024, Maxfile = 100*1024, }; enum { Wpara, Wheading, Wbullet, Wlink, Wman, Wplain, Wpre, Whr, Nwtxt, }; struct Wpage { int type; char *text; int section; /* Wman */ char *url; /* Wlink */ Wpage *next; }; struct Whist { Ref; int n; char *title; Wdoc *doc; int ndoc; int current; }; struct Wdoc { char *author; char *comment; int conflict; ulong time; Wpage *wtxt; }; enum { Tpage, Tedit, Tdiff, Thistory, Tnew, Toldpage, Twerror, Ntemplate, }; struct Sub { char *match; char *sub; }; struct Mapel { char *s; int n; }; struct Map { Ref; Mapel *el; int nel; ulong t; char *buf; Qid qid; }; void *erealloc(void*, ulong); void *emalloc(ulong); char *estrdup(char*); char *estrdupn(char*, int); char *strcondense(char*, int); char *strlower(char*); String *s_appendsub(String*, char*, int, Sub*, int); String *s_appendlist(String*, ...); Whist *Brdwhist(Biobuf*); Wpage *Brdpage(char*(*)(void*,int), void*); void printpage(Wpage*); String *pagehtml(String*, Wpage*, int); String *pagetext(String*, Wpage*, int); String *tohtml(Whist*, Wdoc*, int); String *totext(Whist*, Wdoc*, int); String *doctext(String*, Wdoc*); Whist *getcurrent(int); Whist *getcurrentbyname(char*); Whist *gethistory(int); void closewhist(Whist*); int allocnum(char*, int); void freepage(Wpage*); int nametonum(char*); char *numtoname(int); int writepage(int, ulong, String*, char*); void voidcache(int); void closemap(Map*); void currentmap(int); extern Map *map; extern RWLock maplock; extern char *wikidir; Biobuf *wBopen(char*, int); int wopen(char*, int); int wcreate(char*, int, long); int waccess(char*, int); Dir *wdirstat(char*); int opentemp(char*);