|
|
1.1 ! root 1: ! 2: #include <stdio.h> ! 3: #include <sys/types.h> ! 4: #include <sys/stat.h> ! 5: #include <sys/vcmd.h> ! 6: #include <signal.h> ! 7: #include <errno.h> ! 8: ! 9: char * LOCK = "/usr/spool/vad/lock"; ! 10: char * DEVICE = "/dev/va0"; ! 11: char * DAEMON = "/usr/lib/vad"; ! 12: char * NAME = "Varian"; ! 13: ! 14: extern char *ctime(),*getlogin(); ! 15: ! 16: #define BUFSIZE 16384 ! 17: char vpbuf[BUFSIZE]; ! 18: ! 19: extern int errno; ! 20: extern quit(); ! 21: ! 22: int plotmd [] = { VPLOT, 0, 0 }; ! 23: int prtmd [] = { VPRINT, 0, 0 }; ! 24: int vp; ! 25: FILE *f; ! 26: struct stat stbuf; ! 27: long clock; ! 28: int running; ! 29: char *name; ! 30: char **argv; ! 31: int argc; ! 32: int offline = 0; ! 33: ! 34: main(count,v) ! 35: int count; ! 36: char **v; ! 37: { ! 38: int i,k; ! 39: argv = v; ! 40: argc = count; ! 41: name = argv[1]; ! 42: ! 43: if(argc < 2) { ! 44: fprintf(stderr,"Usage: %s bit_file [banner [message]] [-W]\n",argv[0]); ! 45: exit(1); ! 46: } ! 47: ! 48: if( (f=fopen(argv[1],"r")) == NULL) { ! 49: fprintf(stderr,"Can't open %s\n",argv[1]); ! 50: exit(1); ! 51: } ! 52: ! 53: for(i=0;i<16;i++) ! 54: signal(i,quit); ! 55: ! 56: signal(SIGHUP,SIG_IGN); ! 57: signal(SIGINT,SIG_IGN); ! 58: ! 59: if( '-' == argv[argc-1][0]) { ! 60: switch(argv[argc-1][1]) { ! 61: case 'W': ! 62: LOCK = "/usr/spool/vpd/lock"; ! 63: DEVICE = "/dev/vp0"; ! 64: NAME = "Versatec"; ! 65: DAEMON = "/usr/lib/vpd"; ! 66: break; ! 67: case 'V': ! 68: break; ! 69: default: ! 70: fprintf(stderr,"%s: unknown option - quit\n",argv[argc-1]); ! 71: quit(0); ! 72: } ! 73: argc--; ! 74: } ! 75: ! 76: while( stat(LOCK, &stbuf) >= 0) { ! 77: sleep(30); ! 78: } ! 79: ! 80: if( creat(LOCK, 0666) < 0) { ! 81: fprintf(stderr,"Can't create %s\n",LOCK); ! 82: quit(0); ! 83: } ! 84: ! 85: while(1) { ! 86: if( (vp = open(DEVICE, 1)) >= 0) break; ! 87: if( errno != EIO ) { ! 88: perror(DEVICE); ! 89: quit(0); ! 90: } ! 91: if(offline == 0) { ! 92: fprintf(stderr,"%s is offline\n",NAME); ! 93: offline = 1; ! 94: } ! 95: sleep(30); ! 96: } ! 97: ! 98: /* ! 99: if( (vp = open(DEVICE, 1)) < 0) { ! 100: printf("Put the %s on line\n",NAME); ! 101: for( k=0; k<24 && vp == NULL; k++) { ! 102: sleep(10); ! 103: vp = open(DEVICE,1); ! 104: } ! 105: if( vp == NULL ) { ! 106: fprintf(stderr,"Can't open %s\n",NAME); ! 107: unlink(LOCK); ! 108: quit(0); ! 109: } ! 110: } ! 111: */ ! 112: ! 113: ioctl(vp, VSETSTATE, prtmd); ! 114: running = 1; ! 115: ! 116: clock = time(0); ! 117: if(argc < 3) ! 118: sprintf(vpbuf, "%s: %s\n",getlogin(),ctime(&clock)); ! 119: else ! 120: sprintf(vpbuf, "%s: %s%s\n",getlogin(),ctime(&clock),argv[2]); ! 121: write(vp, vpbuf, BUFSIZE); ! 122: ! 123: ioctl( vp, VSETSTATE, plotmd); ! 124: while( (i=read(fileno(f),vpbuf, BUFSIZE)) > 0) ! 125: write(vp,vpbuf,i); ! 126: quit(-1); ! 127: } ! 128: ! 129: quit(n) ! 130: int n; ! 131: { ! 132: if(running) { ! 133: ioctl(vp, VSETSTATE, prtmd); ! 134: write(vp, "\f\f", 2); ! 135: } ! 136: close(vp); ! 137: unlink(LOCK); ! 138: unlink(name); ! 139: if(n < 0) { ! 140: if(argc > 2) fprintf(stderr,"%s\n",argv[3]); ! 141: } ! 142: else fprintf(stderr,"Plotting Aborted\n"); ! 143: execl( DAEMON, DAEMON, 0 ); ! 144: exit(0); ! 145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.