#define CONSOLE "/dev/console"
#define dprcons if (debug) prcons
* Varian or Versatec printer daemon
char vpdSCCSid
[] = "@(#)vpd.c 1.4\t%G%";
#define VRAST "/usr/local/lib/vrast"
#define VDMP "/usr/lib/vdmp"
#define VPLTDMP "/usr/lib/vpltdmp"
#define DEVICE "/dev/va0"
#define DFNAME "/usr/spool/vad/"
#define SPOOLDIR "/usr/spool/vad"
#define DEVICE "/dev/vp0"
#define DFNAME "/usr/spool/vpd/"
#define SPOOLDIR "/usr/spool/vpd"
int prtmode
[] = {VPRINT
, 0, 0};
char dfname
[33] = DFNAME
;
char tmplock
[] = "lockXXXXXX";
register struct direct
*dirp
;
signal(SIGQUIT
, SIG_IGN
);
signal(SIGTERM
, SIG_IGN
);
* Close all files, open root as 0, 1, 2
* to assure standard environment
for (df
= 0; df
<= 15; df
++)
if (chdir(SPOOLDIR
) < 0 || (df
= creat(mktemp(tmplock
), 0)) < 0) {
prcons("%s: error accessing %s\n", NAME
, SPOOLDIR
);
if (link(tmplock
, "lock") < 0) {
if (open(DEVICE
, 1) == 3)
extern char *sys_errlist
[];
prcons("%s: %s: %s\n", NAME
, DEVICE
, sys_errlist
[errno
]);
int f
= open("/dev/tty", 1);
write(f
, NAME
, strlen(NAME
));
write(f
, " is offline\n", 12);
dprcons("one last time\n");
} 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
);
if (trysend(dfname
, okreque
)) {
printf("reque %s\n", dfname
);
for(*banbuf
= plot
= 0; getline();) switch(line
[0]) {
strcpy(banbuf
, line
+ 1);
strcat(banner
, line
+ 1);
strcpy(fonts
[line
[0]-'1'], line
+ 1);
case 'C': /* called by cifplot */
case 'V': /* called by vplot */
case 'G': /* Like f, but invoke vpf with -l flag. */
status
.w_status
= send(line
[0]);
status
.w_status
= send(line
[0]);
* If the process that did the work did an exit(1),
* we should requeue the file.
if (!WIFEXITED(status
) || status
.w_retcode
> 1) {
ioctl(3, VSETSTATE
, prtmode
);
write(3, "\nDAEMON MALFUNCTION\n", 20);
} else if (status
.w_retcode
== 1 && okreque
)
* All done, for better or for worse.
while (getline()) switch (*line
) {
static char ifonts
[4][50] = {
strcpy(fonts
[i
], ifonts
[i
]);
for (i
= 3; i
<= 15; i
++)
execl("/bin/mail", "mail", &line
[1], 0);
printf("Your %s job %s\n", NAME
, bomb
? "screwed up" : "is done");
while ((c
= getc (dfb
)) != '\n') {
} while ((linel
& 07) != 0);
ioctl (3, VSETSTATE
, prtmode
);
execl ("/usr/lib/vpf", "vpf",
"-b", banbuf
, line
+1, 0);
execl ("/usr/lib/vpf", "vpf",
case 'G': /* Like F (vpf), but passes through -l
flag to vpf (print control chars). */
execl ("/usr/lib/vpf", "vpf", "-l",
"-b", banbuf
, line
+1, 0);
execl ("/usr/lib/vpf", "vpf", "-l",
rm
= creat(".railmag", 0666);
for (i
= 0; i
< 4; i
++) {
write(rm
, "/usr/lib/vfont/", 15);
write(rm
, fonts
[i
], strlen (fonts
[i
]));
execl("/usr/lib/rvcat", "rvcat",
execl("/usr/lib/vcat", "rvcat",
"-3", "-b", banbuf
, line
+1, 0);
execl("/usr/lib/rvcat", "rvcat",
execl("/usr/lib/vcat", "rvcat",
"-v", "-b", banbuf
, line
+1, linep
, 0);
execl(VDMP
,"vdmp","-n",banbuf
,"-b",banner
,
execl(VPLTDMP
,"vpltdmp","-n",banbuf
,"-b",banner
,
exit(2); /* execl failed or not one of above cases. */
if (stat(dfname
, &stb
) < 0)
* skip 16 inches or do two formfeeds.
ioctl(3, VSETSTATE
, prtmode
);
write(3, "\n\n\n\n\n\n\n\n", 8);
ioctl(3, VSETSTATE
, prtmode
);
prcons(cp
, a1
, a2
, a3
, a4
, a5
)
int f
= open(CONSOLE
, 1);
sprintf(buf
, cp
, a1
, a2
, a3
, a4
, a5
);
write(f
, buf
, strlen(buf
));