[BACK]Return to cgi.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/cgi.c between version 1.14 and 1.19

version 1.14, 2011/12/07 15:55:06 version 1.19, 2011/12/08 22:47:09
Line 67  struct req {
Line 67  struct req {
   
 static  int              atou(const char *, unsigned *);  static  int              atou(const char *, unsigned *);
 static  void             catman(const char *);  static  void             catman(const char *);
   static  int              cmp(const void *, const void *);
 static  void             format(const char *);  static  void             format(const char *);
 static  void             html_print(const char *);  static  void             html_print(const char *);
 static  void             html_putchar(char);  static  void             html_putchar(char);
Line 340  resp_searchform(const struct req *req)
Line 341  resp_searchform(const struct req *req)
         html_print(progname);          html_print(progname);
         printf("/search.html\" METHOD=\"get\">\n");          printf("/search.html\" METHOD=\"get\">\n");
         printf("<FIELDSET>\n"          printf("<FIELDSET>\n"
                  "<LEGEND>Search Parameters</LEGEND>\n"
                "<INPUT TYPE=\"submit\" NAME=\"op\" "                 "<INPUT TYPE=\"submit\" NAME=\"op\" "
                 "VALUE=\"Whatis\"> or \n"                  "VALUE=\"Whatis\"> or \n"
                "<INPUT TYPE=\"submit\" NAME=\"op\" "                 "<INPUT TYPE=\"submit\" NAME=\"op\" "
Line 422  resp_baddb(void)
Line 424  resp_baddb(void)
 static void  static void
 resp_search(struct res *r, size_t sz, void *arg)  resp_search(struct res *r, size_t sz, void *arg)
 {  {
         int              i;          int              i, whatis;
         char            *cp;          const char      *ep, *sec, *arch;
           const struct req *req;
   
           whatis = 1;
           ep = sec = arch = NULL;
   
         if (1 == sz) {          if (1 == sz) {
                 /*                  /*
                  * If we have just one result, then jump there now                   * If we have just one result, then jump there now
Line 438  resp_search(struct res *r, size_t sz, void *arg)
Line 444  resp_search(struct res *r, size_t sz, void *arg)
                 return;                  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_begin_html(200, NULL);
         resp_searchform((const struct req *)arg);          resp_searchform(req);
   
         if (0 == sz) {          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&amp;expr=");
                           html_print(ep ? ep : "");
                           printf("&amp;sec=");
                           html_print(sec ? sec : "");
                           printf("&amp;arch=");
                           html_print(arch ? arch : "");
                           puts("\">apropos</A>?)");
                   }
                   puts("</P>");
                 resp_end_html();                  resp_end_html();
                 return;                  return;
         }          }
Line 454  resp_search(struct res *r, size_t sz, void *arg)
Line 495  resp_search(struct res *r, size_t sz, void *arg)
                 printf("<TR><TD CLASS=\"title\"><A HREF=\"");                  printf("<TR><TD CLASS=\"title\"><A HREF=\"");
                 html_print(progname);                  html_print(progname);
                 printf("/show/%u/%u.html\">", r[i].volume, r[i].rec);                  printf("/show/%u/%u.html\">", r[i].volume, r[i].rec);
                 for (cp = r[i].title; '\0' != *cp; cp++)                  html_print(r[i].title);
                         html_putchar(toupper((unsigned char)*cp));  
                 putchar('(');                  putchar('(');
                 html_print(r[i].cat);                  html_print(r[i].cat);
                 if (r[i].arch && '\0' != *r[i].arch) {                  if (r[i].arch && '\0' != *r[i].arch) {
Line 467  resp_search(struct res *r, size_t sz, void *arg)
Line 507  resp_search(struct res *r, size_t sz, void *arg)
                 puts("</TD></TR>");                  puts("</TD></TR>");
         }          }
   
           puts("</TABLE>");
   
         resp_end_html();          resp_end_html();
 }  }
   
Line 726  pg_show(const struct manpaths *ps, const struct req *r
Line 768  pg_show(const struct manpaths *ps, const struct req *r
         else if (NULL == memchr(fn, '\0', val.size - (fn - cp)))          else if (NULL == memchr(fn, '\0', val.size - (fn - cp)))
                 resp_baddb();                  resp_baddb();
         else {          else {
                 strlcpy(file, ps->paths[vol], MAXPATHLEN);                  strlcpy(file, cache, MAXPATHLEN);
                 strlcat(file, "/", MAXPATHLEN);                  strlcat(file, "/", MAXPATHLEN);
                 strlcat(file, fn, MAXPATHLEN);                  strlcat(file, fn, MAXPATHLEN);
                 if (0 == strcmp(cp, "cat"))                  if (0 == strcmp(cp, "cat"))
Line 752  pg_search(const struct manpaths *ps, const struct req 
Line 794  pg_search(const struct manpaths *ps, const struct req 
         cp = NULL;          cp = NULL;
         ep = NULL;          ep = NULL;
         sz = 0;          sz = 0;
         whatis = 0;          whatis = 1;
   
         memset(&opt, 0, sizeof(struct opts));          memset(&opt, 0, sizeof(struct opts));
   
Line 917  main(void)
Line 959  main(void)
   
         return(EXIT_SUCCESS);          return(EXIT_SUCCESS);
 }  }
   
   static int
   cmp(const void *p1, const void *p2)
   {
   
           return(strcasecmp(((const struct res *)p1)->title,
                                   ((const struct res *)p2)->title));
   }
   

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.19

CVSweb