date and time created 83/08/11 20:49:31 by sam
[unix-history] / usr / src / old / vpr / vpd.c
index 1536d6d..e1cf166 100644 (file)
@@ -1,10 +1,13 @@
 #define        CONSOLE         "/dev/console"
 #define        dprcons         if (debug) prcons
 /*
 #define        CONSOLE         "/dev/console"
 #define        dprcons         if (debug) prcons
 /*
+ * vpd.c                                               updated %G%
  * Varian or Versatec printer daemon
  */
  * Varian or Versatec printer daemon
  */
+char vpdSCCSid[] = "@(#)vpd.c  1.4\t%G%";
+
 #include <stdio.h>
 #include <stdio.h>
-#include <sys/types.h>
+#include <sys/param.h>
 #include <dir.h>
 #include <signal.h>
 #include <stat.h>
 #include <dir.h>
 #include <signal.h>
 #include <stat.h>
@@ -17,6 +20,8 @@ int   debug;
 extern int errno;
 
 #define VRAST          "/usr/local/lib/vrast"
 extern int errno;
 
 #define VRAST          "/usr/local/lib/vrast"
+#define VDMP           "/usr/lib/vdmp"
+#define VPLTDMP                "/usr/lib/vpltdmp"
 
 #ifdef VARIAN
 #define DEVICE         "/dev/va0"
 
 #ifdef VARIAN
 #define DEVICE         "/dev/va0"
@@ -37,12 +42,12 @@ int prtmode[] =     {VPRINT, 0, 0};
 char   line[128];
 char    linep[127];
 char   banbuf[64];
 char   line[128];
 char    linep[127];
 char   banbuf[64];
+char   banner[512];
 char   printflag;
 int    linel;
 FILE   *dfb;
 char   dfname[33] = DFNAME;
 int    waittm = 6;
 char   printflag;
 int    linel;
 FILE   *dfb;
 char   dfname[33] = DFNAME;
 int    waittm = 6;
-struct dir dbuf;
 int    onalrm ();
 char   tmplock[] = "lockXXXXXX";
 char   fonts[4][50] = {
 int    onalrm ();
 char   tmplock[] = "lockXXXXXX";
 char   fonts[4][50] = {
@@ -53,14 +58,34 @@ char        fonts[4][50] = {
 };
 
 main(argc, argv)
 };
 
 main(argc, argv)
+       int argc;
+       char **argv;
 {
 {
-       char dp, n;
+       char n;
        register char *p1, *p2;
        register int df;
        register char *p1, *p2;
        register int df;
+       register struct direct *dirp;
+       DIR *dp;
        struct stat stb;
        int offline = 0;
        int i, okreque = 1;
 
        struct stat stb;
        int offline = 0;
        int i, okreque = 1;
 
+       while (argc > 1) {
+               argc--;
+               argv++;
+               if (argv[0][0] != '-')
+                       continue;
+               switch (argv[0][1]) {
+               case 'n':
+                       if (argc < 2)
+                               break;
+                       argv++;
+                       argc--;
+                       nice(atol(argv[0]));
+                       break;
+               }
+       }
+       setuid(getuid());
        signal(SIGHUP, SIG_IGN);
        signal(SIGINT, SIG_IGN);
        signal(SIGQUIT, SIG_IGN);
        signal(SIGHUP, SIG_IGN);
        signal(SIGINT, SIG_IGN);
        signal(SIGQUIT, SIG_IGN);
@@ -119,14 +144,14 @@ reopen:
                }
                sleep(10);
        }
                }
                sleep(10);
        }
-       dp = open(".", 0);
+       dp = opendir(".");
 search:
        dprcons("search\n");
        if (okreque == 1) {
 search:
        dprcons("search\n");
        if (okreque == 1) {
-               lseek(dp, 0, 0);
+               rewinddir(dp);
                do {
                do {
-                       n = read(dp, &dbuf, sizeof dbuf);
-                       if (n <= 0) {
+                       dirp = readdir(dp);
+                       if (dirp == NULL) {
                                if (printflag)
                                        lastpage();
                                unlink("lock");
                                if (printflag)
                                        lastpage();
                                unlink("lock");
@@ -138,13 +163,13 @@ search:
                                dprcons("one last time\n");
                                printflag = 0;
                                close(3);
                                dprcons("one last time\n");
                                printflag = 0;
                                close(3);
+                               closedir(dp);
                                sleep(30);
                                goto begin;
                        }
                                sleep(30);
                                goto begin;
                        }
-               } while (!dbuf.d_ino
-                   || dbuf.d_name[0] != 'd' || dbuf.d_name[1] != 'f');
-               strcpy(&dfname[15], dbuf.d_name);
-               dprcons("found %s\n", dbuf.d_name);
+               } while (dirp->d_name[0] != 'd' || dirp->d_name[1] != 'f');
+               strcpy(&dfname[15], dirp->d_name);
+               dprcons("found %s\n", dirp->d_name);
        }
        dprcons("trying %s\n", dfname);
        printflag = 1;
        }
        dprcons("trying %s\n", dfname);
        printflag = 1;
@@ -152,7 +177,7 @@ search:
                feedpage();
        if (trysend(dfname, okreque)) {
                okreque = 0;
                feedpage();
        if (trysend(dfname, okreque)) {
                okreque = 0;
-               close(dp);
+               closedir(dp);
                printf("reque %s\n", dfname);
                close(3);
                goto reopen;
                printf("reque %s\n", dfname);
                close(3);
                goto reopen;
@@ -177,12 +202,22 @@ int okreque;
                unlink(file);
                return (0);
        }
                unlink(file);
                return (0);
        }
-       for (*banbuf = plot = 0; getline (); ) switch (line[0]) {
+       banner[0] = '\0';
+       for(*banbuf= plot= 0; getline();) switch(line[0]) {
 
        case 'L':
                strcpy(banbuf, line + 1);
                continue;
 
 
        case 'L':
                strcpy(banbuf, line + 1);
                continue;
 
+       case 'B':       /* banner */
+               if(banner[0] == '\0')
+                   strcat(banner, line + 1);
+                 else {
+                   strcat(banner,"\n");
+                   strcat(banner, line+1);
+                   }
+               continue;
+
        case '1':
        case '2':
        case '3':
        case '1':
        case '2':
        case '3':
@@ -190,6 +225,8 @@ int okreque;
                strcpy(fonts[line[0]-'1'], line + 1);
                continue;
 
                strcpy(fonts[line[0]-'1'], line + 1);
                continue;
 
+       case 'C':       /* called by cifplot */
+       case 'V':       /* called by vplot */
        case 'F':
        case 'G':       /* Like f, but invoke vpf with -l flag. */
        case 'T':
        case 'F':
        case 'G':       /* Like f, but invoke vpf with -l flag. */
        case 'T':
@@ -412,6 +449,20 @@ char c;
 #endif
                        "-v", line+1, linep, 0);
                break;
 #endif
                        "-v", line+1, linep, 0);
                break;
+       case 'C':
+               execl(VDMP,"vdmp","-n",banbuf,"-b",banner,
+#ifdef VERSATEC
+                       "-W",
+#endif
+                       line+1,0);
+               break;
+       case 'V':
+               execl(VPLTDMP,"vpltdmp","-n",banbuf,"-b",banner,
+#ifdef VERSATEC
+                       "-W",
+#endif
+                       line+1,0);
+               break;
        }
        exit(2);        /* execl failed or not one of above cases. */
 }
        }
        exit(2);        /* execl failed or not one of above cases. */
 }