* Copyright (c) 1987 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* 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
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1987 Regents of the University of California.\n\
static char sccsid
[] = "@(#)apropos.c 5.12 (Berkeley) 6/1/90";
#include "../man/pathnames.h"
#define MAXLINELEN 256 /* max line handled */
static int *found
, foundman
;
char *p_augment
, *p_path
, **getdb();
p_augment
= p_path
= NULL
;
while ((ch
= getopt(argc
, argv
, "M:m:P:")) != EOF
)
case 'P': /* backward compatible */
if (!(found
= (int *)malloc((u_int
)argc
)))
bzero((void *)found
, argc
* sizeof(int));
for (p
= argv
; *p
; ++p
) /* convert to lower-case */
apropos(argv
, p_augment
, 1);
if (p_path
|| (p_path
= getenv("MANPATH")))
apropos(argv
, p_path
, 1);
for (p
= getdb(); *p
; ++p
)
"apropos: : no %s file found.\n", _PATH_WHATIS
);
(void)printf("%s: nothing appropriate\n", *p
);
apropos(argv
, path
, buildpath
)
register char *end
, *name
, **p
;
char buf
[MAXLINELEN
+ 1], wbuf
[MAXLINELEN
+ 1];
for (name
= path
; name
; name
= end
) { /* through name list */
if (end
= index(name
, ':'))
char hold
[MAXPATHLEN
+ 1];
(void)sprintf(hold
, "%s/%s", name
, _PATH_WHATIS
);
if (!freopen(name
, "r", stdin
))
/* for each file found */
while (fgets(buf
, sizeof(buf
), stdin
)) {
"apropos: %s line too long.\n", name
);
/* only print line once */
* match anywhere the string appears
/* backward compatible: everything matches empty string */
for (test
= *str
++, len
= strlen(str
); *bp
;)
if (test
== *bp
++ && !strncmp(bp
, str
, len
))
* convert a string to lower case
register char *from
, *to
;
while ((ch
= *from
++) && ch
!= '\n')
*to
++ = isupper(ch
) ? tolower(ch
) : ch
;
* print usage message and die
"usage: apropos [-M path] [-m path] keyword ...\n");