=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -p -r1.18 -r1.19 --- mandoc/cgi.c 2011/12/08 18:39:14 1.18 +++ mandoc/cgi.c 2011/12/08 22:47:09 1.19 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.18 2011/12/08 18:39:14 kristaps Exp $ */ +/* $Id: cgi.c,v 1.19 2011/12/08 22:47:09 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * @@ -424,8 +424,13 @@ resp_baddb(void) static void resp_search(struct res *r, size_t sz, void *arg) { - int i; + int i, whatis; + const char *ep, *sec, *arch; + const struct req *req; + whatis = 1; + ep = sec = arch = NULL; + if (1 == sz) { /* * If we have just one result, then jump there now @@ -439,13 +444,46 @@ resp_search(struct res *r, size_t sz, void *arg) return; } + req = (const struct req *)arg; + + for (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")) + 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; }