===================================================================
RCS file: /cvs/mandoc/cgi.c,v
retrieving revision 1.10
retrieving revision 1.13
diff -u -p -r1.10 -r1.13
--- mandoc/cgi.c 2011/12/07 00:23:04 1.10
+++ mandoc/cgi.c 2011/12/07 15:12:34 1.13
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.10 2011/12/07 00:23:04 kristaps Exp $ */
+/* $Id: cgi.c,v 1.13 2011/12/07 15:12:34 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"
+ "
"); while (NULL != (p = fgetln(f, &len))) { @@ -614,9 +642,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); @@ -707,7 +735,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 +745,31 @@ pg_search(const struct manpaths *ps, const struct req cp = NULL; ep = NULL; sz = 0; + whatis = 0; 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 +798,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);