static char *sccsid
= "@(#)catman.c 4.6 (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/";
register char *msp
, *csp
, *sp
;
register char changed
= 0;
if (strcmp(*av
, "-p") == 0)
else if (strcmp(*av
, "-n") == 0)
else if (strcmp(*av
, "-w") == 0)
printf("usage: catman [ -p ] [ -n ] [ -w ] [ sections ]\n");
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
);
printf("/bin/sh /usr/lib/makewhatis\n");
execl("/bin/sh", "/bin/sh", "/usr/lib/makewhatis", 0);
perror("/bin/sh /usr/lib/makewhatis");