* Copyright (c) 1987 Regents of the University of California.
* %sccs.include.redist.c%
"@(#) Copyright (c) 1987 Regents of the University of California.\n\
static char sccsid
[] = "@(#)apropos.c 5.13 (Berkeley) %G%";
#include "../man/pathnames.h"
#define MAXLINELEN 1024 /* 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");