* 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
[] = "@(#)whatis.c 5.2 (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
, "whatis: out of space.\n");
bzero((char *)found
, argc
* sizeof(int));
for (p
= argv
; *p
; ++p
) /* trim full paths */
if (beg
= rindex(*p
, '/'))
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
, "whatis: no %s file found in %s.\n",
printf("%s: not found\n", *p
);
for (len
= strlen(str
);;) {
for (; *bp
&& !isdigit(*bp
) && !isalpha(*bp
); ++bp
);
*bp
&& (*bp
== '_' || isdigit(*bp
) || isalpha(*bp
)); ++bp
);
if (bp
- start
== len
&& !strncasecmp(start
, str
, len
))
* truncate a string at " - "
register char *from
, *to
;
for (; (ch
= *from
) && ch
!= '\n' &&
(ch
!= ' ' || from
[1] != '-' || from
[2] != ' '); ++from
)
* print usage message and die
fprintf(stderr
, "usage: whatis [-M path] string ...\n");