[BACK]Return to apropos.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / apropos

Diff for /src/usr.bin/apropos/Attic/apropos.c between version 1.7 and 1.14

version 1.7, 2000/11/20 14:03:31 version 1.14, 2008/12/24 09:05:17
Line 13 
Line 13 
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the   *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.   *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software   * 3. Neither the name of the University nor the names of its contributors
  *    must display the following acknowledgement:  
  *      This product includes software developed by the University of  
  *      California, Berkeley and its contributors.  
  * 4. Neither the name of the University nor the names of its contributors  
  *    may be used to endorse or promote products derived from this software   *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.   *    without specific prior written permission.
  *   *
Line 66 
Line 62 
   
 #define MAXLINELEN      8192            /* max line handled */  #define MAXLINELEN      8192            /* max line handled */
   
 void apropos __P((char **, char *, int));  void apropos(char **, char *, int, char *, char *);
 void lowstr __P((char *, char *));  void lowstr(char *, char *);
 int match __P((char *, char *));  int match(char *, char *);
 void usage __P((void));  void usage(void);
   
 int  int
 main(argc, argv)  main(int argc, char *argv[])
         int argc;  
         char *argv[];  
 {  {
         ENTRY *ep;          ENTRY *ep;
         TAG *tp;          TAG *tp;
         int ch, rv;          int ch, rv;
         char *conffile, **p, *p_augment, *p_path;          char *conffile, *machine, **p, *p_augment, *p_path, *sflag;
   
         conffile = NULL;          conffile = NULL;
         p_augment = p_path = NULL;          p_augment = p_path = NULL;
         while ((ch = getopt(argc, argv, "C:M:m:P:")) != -1)          machine = sflag = NULL;
           while ((ch = getopt(argc, argv, "C:M:m:P:S:s:")) != -1)
                 switch (ch) {                  switch (ch) {
                 case 'C':                  case 'C':
                         conffile = optarg;                          conffile = optarg;
Line 95 
Line 90 
                 case 'm':                  case 'm':
                         p_augment = optarg;                          p_augment = optarg;
                         break;                          break;
                   case 'S':
                           machine = optarg;
                           lowstr(machine, machine);
                           break;
                   case 's':
                           sflag = optarg;
                           lowstr(sflag, sflag);
                           break;
                 case '?':                  case '?':
                 default:                  default:
                         usage();                          usage();
Line 105 
Line 108 
         if (argc < 1)          if (argc < 1)
                 usage();                  usage();
   
         if ((found = malloc((u_int)argc * sizeof(int))) == NULL)          if ((found = calloc(argc, sizeof(int))) == NULL)
                 err(1, NULL);                  err(1, NULL);
         memset(found, 0, argc * sizeof(int));  
   
         for (p = argv; *p; ++p)                 /* convert to lower-case */          for (p = argv; *p; ++p)                 /* convert to lower-case */
                 lowstr(*p, *p);                  lowstr(*p, *p);
   
         if (p_augment)          if (p_augment)
                 apropos(argv, p_augment, 1);                  apropos(argv, p_augment, 1, sflag, machine);
         if (p_path || (p_path = getenv("MANPATH")))          if (p_path || (p_path = getenv("MANPATH")))
                 apropos(argv, p_path, 1);                  apropos(argv, p_path, 1, sflag, machine);
         else {          else {
                 config(conffile);                  config(conffile);
                 ep = (tp = getlist("_whatdb")) == NULL ?                  ep = (tp = getlist("_whatdb")) == NULL ?
                     NULL : tp->list.tqh_first;                      NULL : TAILQ_FIRST(&tp->list);
                 for (; ep != NULL; ep = ep->q.tqe_next)                  for (; ep != NULL; ep = TAILQ_NEXT(ep, q))
                         apropos(argv, ep->s, 0);                          apropos(argv, ep->s, 0, sflag, machine);
         }          }
   
         if (!foundman)          if (!foundman)
Line 137 
Line 139 
 }  }
   
 void  void
 apropos(argv, path, buildpath)  apropos(char **argv, char *path, int buildpath, char *sflag, char *machine)
         char **argv, *path;  
         int buildpath;  
 {  {
         char *end, *name, **p;          char *end, *name, **p;
         char buf[MAXLINELEN + 1], wbuf[MAXLINELEN + 1];          char buf[MAXLINELEN + 1], wbuf[MAXLINELEN + 1];
         char hold[MAXPATHLEN];          char hold[MAXPATHLEN];
           size_t slen = 0, mlen = 0;
   
           if (sflag)
                   slen = strlen(sflag);
           if (machine)
                   mlen = strlen(machine);
   
         for (name = path; name; name = end) {   /* through name list */          for (name = path; name; name = end) {   /* through name list */
                 if ((end = strchr(name, ':')))                  if ((end = strchr(name, ':')))
                         *end++ = '\0';                          *end++ = '\0';
Line 167 
Line 173 
                                 continue;                                  continue;
                         }                          }
                         lowstr(buf, wbuf);                          lowstr(buf, wbuf);
                           if (sflag || machine) {
                                   char *s = strstr(wbuf, ") - ");
                                   if (!s)
                                           continue;
                                   while (s > wbuf && *s != '/' && *s != '(')
                                           s--;
                                   if (machine && *s == '/' &&
                                       strncmp(s+1, machine, mlen))
                                           continue;
                                   while (s > wbuf && *s != '(')
                                           s--;
                                   if (sflag && *s == '(' &&
                                       strncmp(s+1, sflag, slen))
                                           continue;
                           }
                         for (p = argv; *p; ++p)                          for (p = argv; *p; ++p)
                                 if (match(wbuf, *p)) {                                  if (match(wbuf, *p)) {
                                         (void)printf("%s", buf);                                          (void)printf("%s", buf);
Line 187 
Line 208 
  *      match anywhere the string appears   *      match anywhere the string appears
  */   */
 int  int
 match(bp, str)  match(char *bp, char *str)
         char *bp, *str;  
 {  {
         int len;          int len;
         char test;          char test;
Line 209 
Line 229 
  *      convert a string to lower case   *      convert a string to lower case
  */   */
 void  void
 lowstr(from, to)  lowstr(char *from, char *to)
         char *from, *to;  
 {  {
         char ch;          char ch;
   
Line 224 
Line 243 
  *      print usage message and die   *      print usage message and die
  */   */
 void  void
 usage()  usage(void)
 {  {
   
         (void)fprintf(stderr,          (void)fprintf(stderr,
             "usage: apropos [-C file] [-M path] [-m path] keyword [...]\n");              "usage: apropos [-C file] [-M path] [-m path] "
               "[-S subsection] [-s section]\n"
               "       keyword ...\n");
         exit(1);          exit(1);
 }  }

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