* Copyright (c) 1987 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
"@(#) Copyright (c) 1987 Regents of the University of California.\n\
static char sccsid
[] = "@(#)apropos.c 5.7 (Berkeley) %G%";
#define DEF_PATH "/usr/man:/usr/new/man:/usr/local/man"
#define MAXLINELEN 1000 /* max line handled */
#define WHATIS "whatis" /* database name */
register char *beg
, *end
, **p
;
int ch
, foundman
= 0, *found
;
char *manpath
, buf
[MAXLINELEN
+ 1], fname
[MAXPATHLEN
+ 1];
char wbuf
[MAXLINELEN
+ 1], *getenv(), *malloc();
while ((ch
= getopt(argc
, argv
, "M:P:")) != EOF
)
case 'P': /* backward compatible */
if (!(manpath
= getenv("MANPATH")))
if (!(found
= (int *)malloc((u_int
)argc
))) {
fprintf(stderr
, "apropos: out of space.\n");
bzero((char *)found
, argc
* sizeof(int));
for (p
= argv
; *p
; ++p
) /* convert to lower-case */
for (beg
= manpath
; beg
; beg
= end
) { /* through path list */
(void)sprintf(fname
, "%s/%s", beg
, WHATIS
);
(void)sprintf(fname
, "%.*s/%s", end
- beg
, beg
, WHATIS
);
if (!freopen(fname
, "r", stdin
))
/* for each file found */
for (foundman
= 1; fgets(buf
, sizeof(buf
), stdin
);) {
/* only print line once */
fprintf(stderr
, "apropos: no %s file found in %s.\n",
printf("%s: nothing appropriate\n", *p
);
* 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
fprintf(stderr
, "usage: apropos [-M path] string ...\n");