date and time created 85/05/23 14:06:03 by miriam
[unix-history] / usr / src / old / catman / catman.c
index 7e3e194..5282dcb 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)catman.c    4.6 (Berkeley) %G%";
+static char *sccsid = "@(#)catman.c    4.8 (Berkeley) %G%";
 #endif
 
 /*
 #endif
 
 /*
@@ -21,6 +21,7 @@ char  nflag;
 char   wflag;
 char   man[MAXNAMLEN+6] = "manx/";
 char   cat[MAXNAMLEN+6] = "catx/";
 char   wflag;
 char   man[MAXNAMLEN+6] = "manx/";
 char   cat[MAXNAMLEN+6] = "catx/";
+char   *mandir = "/usr/man";
 char   *rindex();
 
 main(ac, av)
 char   *rindex();
 
 main(ac, av)
@@ -32,32 +33,50 @@ main(ac, av)
        register int exstat = 0;
        register char changed = 0;
 
        register int exstat = 0;
        register char changed = 0;
 
-       while (ac > 1) {
-               av++;
-               if (strcmp(*av, "-p") == 0)
+       ac--, av++;
+       while (ac > 0 && av[0][0] == '-') {
+               switch (av[0][1]) {
+
+               case 'p':
                        pflag++;
                        pflag++;
-               else if (strcmp(*av, "-n") == 0)
+                       break;
+
+               case 'n':
                        nflag++;
                        nflag++;
-               else if (strcmp(*av, "-w") == 0)
+                       break;
+
+               case 'w':
                        wflag++;
                        wflag++;
-               else if (*av[0] == '-')
-                       goto usage;
-               else
                        break;
                        break;
-               ac--;
+
+               case 'M':
+               case 'P':
+                       if (ac < 1) {
+                               fprintf(stderr, "%s: missing directory\n",
+                                   av[0]);
+                               exit(1);
+                       }
+                       ac--, av++;
+                       mandir = *av;
+                       break;
+
+               default:
+                       goto usage;
+               }
+               ac--, av++;
        }
        }
-       if (ac == 2)
-               sections = *av;
-       else if (ac < 2)
-               sections = "12345678ln";
-       else {
+       if (ac > 1) {
 usage:
 usage:
-               printf("usage: catman [ -p ] [ -n ] [ -w ] [ sections ]\n");
+               printf("usage: catman [ -p ] [ -n ] [ -w ] [ -M path ] [ sections ]\n");
                exit(-1);
        }
                exit(-1);
        }
+       sections = (ac == 1) ? *av : "12345678ln";
        if (wflag)
                goto whatis;
        if (wflag)
                goto whatis;
-       chdir("/usr/man");
+       if (chdir(mandir) < 0) {
+               fprintf(stderr, "catman: "), perror(mandir);
+               exit(1);
+       }
        msp = &man[5];
        csp = &cat[5];
        umask(0);
        msp = &man[5];
        csp = &cat[5];
        umask(0);
@@ -140,13 +159,13 @@ usage:
        }
        if (changed && !nflag) {
 whatis:
        }
        if (changed && !nflag) {
 whatis:
-               if (pflag)
-                       printf("/bin/sh /usr/lib/makewhatis\n");
-               else {
-                       execl("/bin/sh", "/bin/sh", "/usr/lib/makewhatis", 0);
+               if (!pflag) {
+                       execl("/bin/sh", "/bin/sh",
+                           "/usr/lib/makewhatis", mandir, 0);
                        perror("/bin/sh /usr/lib/makewhatis");
                        exstat = 1;
                        perror("/bin/sh /usr/lib/makewhatis");
                        exstat = 1;
-               }
+               } else
+                       printf("/bin/sh /usr/lib/makewhatis %s\n", mandir);
        }
        exit(exstat);
 }
        }
        exit(exstat);
 }