From 2671d8b5f928661e34f3b3a25984aa41fadeef1c Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Thu, 8 Dec 2011 22:47:09 +0000 Subject: If no man.cgi `whatis' results are found, offer a quick link to the apropos query mode. --- cgi.c | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) (limited to 'cgi.c') diff --git a/cgi.c b/cgi.c index 38e821ab..755318b9 100644 --- a/cgi.c +++ b/cgi.c @@ -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,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("

No results found.

"); + puts("

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

"); resp_end_html(); return; } -- cgit v1.2.3-56-ge451