===================================================================
RCS file: /cvs/mandoc/cgi.c,v
retrieving revision 1.10
retrieving revision 1.19
diff -u -p -r1.10 -r1.19
--- mandoc/cgi.c 2011/12/07 00:23:04 1.10
+++ mandoc/cgi.c 2011/12/08 22:47:09 1.19
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.10 2011/12/07 00:23:04 kristaps Exp $ */
+/* $Id: cgi.c,v 1.19 2011/12/08 22:47:09 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons \n"
- " The query your entered was malformed.\n"
- " Try again from the\n"
- " main page\n"
- " \n"
+ " The query your entered was malformed.\n"
+ " Try again from the\n"
+ " main page\n"
+ "Malformed Query
\n"
- "Malformed Query
\n"
+ "
No results found.
"); + if (0 == sz) { + puts("\n" + "No results found."); + if (whatis) { + printf("(Try apropos?)"); + } + puts("
"); + resp_end_html(); + return; + } + puts("\n" + "", r[i].volume, r[i].rec); html_print(r[i].title); @@ -440,11 +502,13 @@ resp_search(struct res *r, size_t sz, void *arg) putchar('/'); html_print(r[i].arch); } - printf(") "); + printf(") | "); html_print(r[i].desc); - puts(""); + puts(" | "); } + puts("
"); while (NULL != (p = fgetln(f, &len))) { @@ -614,9 +691,9 @@ format(const char *file) return; } - snprintf(opts, sizeof(opts), "style=/style.css," + snprintf(opts, sizeof(opts), "style=/man.css," "man=%s/search.html?sec=%%S&expr=%%N," - "includes=/cgi-bin/man.cgi/usr/include/%%I", + /*"includes=/cgi-bin/man.cgi/usr/include/%%I"*/, progname); mparse_result(mp, &mdoc, &man); @@ -691,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")) @@ -707,7 +784,7 @@ static void pg_search(const struct manpaths *ps, const struct req *req, char *path) { size_t tt; - int i, sz, rc; + int i, sz, rc, whatis; const char *ep, *start; char **cp; struct opts opt; @@ -717,17 +794,31 @@ pg_search(const struct manpaths *ps, const struct req cp = NULL; ep = NULL; sz = 0; + whatis = 1; memset(&opt, 0, sizeof(struct opts)); for (sz = i = 0; i < (int)req->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")) opt.cat = req->fields[i].val; + else if (0 == strcmp(req->fields[i].key, "sektion")) + opt.cat = req->fields[i].val; else if (0 == strcmp(req->fields[i].key, "arch")) opt.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"); + if (NULL != opt.cat && 0 == strcmp(opt.cat, "0")) + opt.cat = NULL; + /* * Poor man's tokenisation. * Just break apart by spaces. @@ -756,7 +847,10 @@ pg_search(const struct manpaths *ps, const struct req * The resp_search() function is called with the results. */ - if (NULL != (expr = exprcomp(sz, cp, &tt))) + expr = whatis ? termcomp(sz, cp, &tt) : + exprcomp(sz, cp, &tt); + + if (NULL != expr) rc = apropos_search (ps->sz, ps->paths, &opt, expr, tt, (void *)req, resp_search); @@ -865,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)); +} +