19a747e4fSDavid du Colombier typedef struct Map Map; 29a747e4fSDavid du Colombier typedef struct Mapel Mapel; 39a747e4fSDavid du Colombier typedef struct Sub Sub; 49a747e4fSDavid du Colombier typedef struct Wdoc Wdoc; 59a747e4fSDavid du Colombier typedef struct Whist Whist; 69a747e4fSDavid du Colombier typedef struct Wpage Wpage; 79a747e4fSDavid du Colombier 89a747e4fSDavid du Colombier enum { 99a747e4fSDavid du Colombier Tcache = 5, /* seconds */ 109a747e4fSDavid du Colombier Maxmap = 10*1024*1024, 119a747e4fSDavid du Colombier Maxfile = 100*1024, 129a747e4fSDavid du Colombier }; 139a747e4fSDavid du Colombier enum { 149a747e4fSDavid du Colombier Wpara, 159a747e4fSDavid du Colombier Wheading, 169a747e4fSDavid du Colombier Wbullet, 179a747e4fSDavid du Colombier Wlink, 189a747e4fSDavid du Colombier Wman, 199a747e4fSDavid du Colombier Wplain, 209a747e4fSDavid du Colombier Wpre, 21*13ec2712SDavid du Colombier Whr, 229a747e4fSDavid du Colombier Nwtxt, 239a747e4fSDavid du Colombier }; 249a747e4fSDavid du Colombier 259a747e4fSDavid du Colombier struct Wpage { 269a747e4fSDavid du Colombier int type; 279a747e4fSDavid du Colombier char *text; 289a747e4fSDavid du Colombier int section; /* Wman */ 299a747e4fSDavid du Colombier char *url; /* Wlink */ 309a747e4fSDavid du Colombier Wpage *next; 319a747e4fSDavid du Colombier }; 329a747e4fSDavid du Colombier 339a747e4fSDavid du Colombier struct Whist { 349a747e4fSDavid du Colombier Ref; 359a747e4fSDavid du Colombier int n; 369a747e4fSDavid du Colombier char *title; 379a747e4fSDavid du Colombier Wdoc *doc; 389a747e4fSDavid du Colombier int ndoc; 399a747e4fSDavid du Colombier int current; 409a747e4fSDavid du Colombier }; 419a747e4fSDavid du Colombier 429a747e4fSDavid du Colombier struct Wdoc { 439a747e4fSDavid du Colombier char *author; 449a747e4fSDavid du Colombier char *comment; 459a747e4fSDavid du Colombier int conflict; 469a747e4fSDavid du Colombier ulong time; 479a747e4fSDavid du Colombier Wpage *wtxt; 489a747e4fSDavid du Colombier }; 499a747e4fSDavid du Colombier 509a747e4fSDavid du Colombier enum { 519a747e4fSDavid du Colombier Tpage, 529a747e4fSDavid du Colombier Tedit, 539a747e4fSDavid du Colombier Tdiff, 549a747e4fSDavid du Colombier Thistory, 559a747e4fSDavid du Colombier Tnew, 569a747e4fSDavid du Colombier Toldpage, 579a747e4fSDavid du Colombier Twerror, 589a747e4fSDavid du Colombier Ntemplate, 599a747e4fSDavid du Colombier }; 609a747e4fSDavid du Colombier 619a747e4fSDavid du Colombier struct Sub { 629a747e4fSDavid du Colombier char *match; 639a747e4fSDavid du Colombier char *sub; 649a747e4fSDavid du Colombier }; 659a747e4fSDavid du Colombier 669a747e4fSDavid du Colombier struct Mapel { 679a747e4fSDavid du Colombier char *s; 689a747e4fSDavid du Colombier int n; 699a747e4fSDavid du Colombier }; 709a747e4fSDavid du Colombier 719a747e4fSDavid du Colombier struct Map { 729a747e4fSDavid du Colombier Ref; 739a747e4fSDavid du Colombier Mapel *el; 749a747e4fSDavid du Colombier int nel; 759a747e4fSDavid du Colombier ulong t; 769a747e4fSDavid du Colombier char *buf; 779a747e4fSDavid du Colombier Qid qid; 789a747e4fSDavid du Colombier }; 799a747e4fSDavid du Colombier 809a747e4fSDavid du Colombier void *erealloc(void*, ulong); 819a747e4fSDavid du Colombier void *emalloc(ulong); 829a747e4fSDavid du Colombier char *estrdup(char*); 839a747e4fSDavid du Colombier char *estrdupn(char*, int); 849a747e4fSDavid du Colombier char *strcondense(char*, int); 859a747e4fSDavid du Colombier char *strlower(char*); 869a747e4fSDavid du Colombier 879a747e4fSDavid du Colombier String *s_appendsub(String*, char*, int, Sub*, int); 889a747e4fSDavid du Colombier String *s_appendlist(String*, ...); 899a747e4fSDavid du Colombier Whist *Brdwhist(Biobuf*); 909a747e4fSDavid du Colombier Wpage *Brdpage(char*(*)(void*,int), void*); 919a747e4fSDavid du Colombier 929a747e4fSDavid du Colombier void printpage(Wpage*); 939a747e4fSDavid du Colombier String *pagehtml(String*, Wpage*, int); 949a747e4fSDavid du Colombier String *pagetext(String*, Wpage*, int); 959a747e4fSDavid du Colombier String *tohtml(Whist*, Wdoc*, int); 969a747e4fSDavid du Colombier String *totext(Whist*, Wdoc*, int); 979a747e4fSDavid du Colombier String *doctext(String*, Wdoc*); 989a747e4fSDavid du Colombier 999a747e4fSDavid du Colombier Whist *getcurrent(int); 1009a747e4fSDavid du Colombier Whist *getcurrentbyname(char*); 1019a747e4fSDavid du Colombier Whist *gethistory(int); 1029a747e4fSDavid du Colombier void closewhist(Whist*); 1039a747e4fSDavid du Colombier int allocnum(char*, int); 1049a747e4fSDavid du Colombier void freepage(Wpage*); 1059a747e4fSDavid du Colombier int nametonum(char*); 1069a747e4fSDavid du Colombier char *numtoname(int); 1079a747e4fSDavid du Colombier int writepage(int, ulong, String*, char*); 1089a747e4fSDavid du Colombier void voidcache(int); 1099a747e4fSDavid du Colombier 1109a747e4fSDavid du Colombier void closemap(Map*); 1119a747e4fSDavid du Colombier void currentmap(int); 1129a747e4fSDavid du Colombier 1139a747e4fSDavid du Colombier extern Map *map; 1149a747e4fSDavid du Colombier extern RWLock maplock; 1159a747e4fSDavid du Colombier extern char *wikidir; 1169a747e4fSDavid du Colombier Biobuf *wBopen(char*, int); 1179a747e4fSDavid du Colombier int wopen(char*, int); 1189a747e4fSDavid du Colombier int wcreate(char*, int, long); 1199a747e4fSDavid du Colombier int waccess(char*, int); 1209a747e4fSDavid du Colombier Dir *wdirstat(char*); 1219a747e4fSDavid du Colombier int opentemp(char*); 122