static char *sccsid
= "@(#)catman.c 4.8 (Berkeley) %G%";
* catman: update cat'able versions of manual pages
#define SYSTEM(str) (pflag ? printf("%s\n", str) : system(str))
char man
[MAXNAMLEN
+6] = "manx/";
char cat
[MAXNAMLEN
+6] = "catx/";
char *mandir
= "/usr/man";
register char *msp
, *csp
, *sp
;
register char changed
= 0;
while (ac
> 0 && av
[0][0] == '-') {
fprintf(stderr
, "%s: missing directory\n",
printf("usage: catman [ -p ] [ -n ] [ -w ] [ -M path ] [ sections ]\n");
sections
= (ac
== 1) ? *av
: "12345678ln";
fprintf(stderr
, "catman: "), perror(mandir
);
for (sp
= sections
; *sp
; sp
++) {
register struct direct
*dir
;
if ((mdir
= opendir(man
)) == NULL
) {
fprintf(stderr
, "opendir:");
if (stat(cat
, &sbuf
) < 0) {
char buf
[MAXNAMLEN
+ 6], *cp
, *rindex();
printf("mkdir %s\n", buf
);
else if (mkdir(buf
, 0777) < 0) {
sprintf(buf
, "catman: mkdir: %s", cat
);
if ((sbuf
.st_mode
& 0777) != 0777)
while ((dir
= readdir(mdir
)) != NULL
) {
if (dir
->d_ino
== 0 || dir
->d_name
[0] == '.')
* Make sure this is a man file, i.e., that it
* ends in .[0-9] or .[0-9][a-z]
tsp
= rindex(dir
->d_name
, '.');
if (!isdigit(*++tsp
) && *tsp
!= *sp
)
if (*++tsp
&& !isalpha(*tsp
))
strcpy(msp
, dir
->d_name
);
if ((inf
= fopen(man
, "r")) == NULL
) {
if (getc(inf
) == '.' && getc(inf
) == 's'
strcpy(csp
, dir
->d_name
);
if (stat(cat
, &sbuf
) >= 0) {
if (time
>= sbuf
.st_mtime
)
sprintf(buf
, "nroff -man %s > %s", man
, cat
);
execl("/bin/sh", "/bin/sh",
"/usr/lib/makewhatis", mandir
, 0);
perror("/bin/sh /usr/lib/makewhatis");
printf("/bin/sh /usr/lib/makewhatis %s\n", mandir
);