=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.14 retrieving revision 1.19 diff -u -p -r1.14 -r1.19 --- mandoc/cgi.c 2011/12/07 15:55:06 1.14 +++ mandoc/cgi.c 2011/12/08 22:47:09 1.19 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.14 2011/12/07 15:55:06 kristaps Exp $ */ +/* $Id: cgi.c,v 1.19 2011/12/08 22:47:09 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * @@ -67,6 +67,7 @@ struct req { static int atou(const char *, unsigned *); static void catman(const char *); +static int cmp(const void *, const void *); static void format(const char *); static void html_print(const char *); static void html_putchar(char); @@ -340,6 +341,7 @@ resp_searchform(const struct req *req) html_print(progname); printf("/search.html\" METHOD=\"get\">\n"); printf("
\n" + "Search Parameters\n" " or \n" "fieldsz; i++) + if (0 == strcmp(req->fields[i].key, "expr")) + ep = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "query")) + ep = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "sec")) + sec = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "sektion")) + sec = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "arch")) + arch = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "apropos")) + whatis = 0 == strcmp + (req->fields[i].val, "0"); + else if (0 == strcmp(req->fields[i].key, "op")) + whatis = 0 == strcasecmp + (req->fields[i].val, "whatis"); + + qsort(r, sz, sizeof(struct res), cmp); + resp_begin_html(200, NULL); - resp_searchform((const struct req *)arg); + resp_searchform(req); if (0 == sz) { - puts("

No results found.

"); + puts("

\n" + "No results found."); + if (whatis) { + printf("(Try apropos?)"); + } + puts("

"); resp_end_html(); return; } @@ -454,8 +495,7 @@ resp_search(struct res *r, size_t sz, void *arg) printf("", r[i].volume, r[i].rec); - for (cp = r[i].title; '\0' != *cp; cp++) - html_putchar(toupper((unsigned char)*cp)); + html_print(r[i].title); putchar('('); html_print(r[i].cat); if (r[i].arch && '\0' != *r[i].arch) { @@ -467,6 +507,8 @@ resp_search(struct res *r, size_t sz, void *arg) puts(""); } + puts(""); + resp_end_html(); } @@ -726,7 +768,7 @@ pg_show(const struct manpaths *ps, const struct req *r else if (NULL == memchr(fn, '\0', val.size - (fn - cp))) resp_baddb(); else { - strlcpy(file, ps->paths[vol], MAXPATHLEN); + strlcpy(file, cache, MAXPATHLEN); strlcat(file, "/", MAXPATHLEN); strlcat(file, fn, MAXPATHLEN); if (0 == strcmp(cp, "cat")) @@ -752,7 +794,7 @@ pg_search(const struct manpaths *ps, const struct req cp = NULL; ep = NULL; sz = 0; - whatis = 0; + whatis = 1; memset(&opt, 0, sizeof(struct opts)); @@ -917,3 +959,12 @@ main(void) return(EXIT_SUCCESS); } + +static int +cmp(const void *p1, const void *p2) +{ + + return(strcasecmp(((const struct res *)p1)->title, + ((const struct res *)p2)->title)); +} +