diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-12-08 22:47:09 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-12-08 22:47:09 +0000 |
commit | 2671d8b5f928661e34f3b3a25984aa41fadeef1c (patch) | |
tree | 9dae40008c0b43c84d9fb2b41cc97b95a778609e | |
parent | b55088d2650816fbc4f97b8e19abeab61e1fa119 (diff) | |
download | mandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.tar.gz mandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.tar.zst mandoc-2671d8b5f928661e34f3b3a25984aa41fadeef1c.zip |
If no man.cgi `whatis' results are found, offer a quick link to the apropos
query mode.
-rw-r--r-- | cgi.c | 46 |
1 files changed, 42 insertions, 4 deletions
@@ -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 <kristaps@bsd.lv> * @@ -424,7 +424,12 @@ 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) { /* @@ -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("<P>No results found.</P>"); + puts("<P>\n" + "No results found."); + if (whatis) { + printf("(Try <A HREF=\""); + html_print(progname); + printf("/search.html?op=apropos&expr="); + html_print(ep ? ep : ""); + printf("&sec="); + html_print(sec ? sec : ""); + printf("&arch="); + html_print(arch ? arch : ""); + puts("\">apropos</A>?)"); + } + puts("</P>"); resp_end_html(); return; } |