home *** CD-ROM | disk | FTP | other *** search
- /*
- * dpr -- off line print via dataphone daemon to GCOS
- * normally invoked through opr
- */
-
- char tfname[] "/usr/lpd/tfaXXXXX";
- char cfname[] "/usr/lpd/cfaXXXXX";
- char lfname[] "/usr/lpd/lfaXXXXX";
- char dfname[] "/usr/lpd/dfaXXXXX";
- int nact;
- int tff;
- int mailflg;
- char person[10];
- int inchar;
- int maxrec 1000;
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- register char *arg;
- int c, f, flag;
- int out();
-
- pidfn();
- if((signal(1, 1) & 01) == 0)
- signal(1, out);
- if((signal(2, 1) & 01) == 0)
- signal(2, out);
- if((signal(3, 1) & 01) == 0)
- signal(3, out);
- flag = 0;
- tff = nfile(tfname);
- while (argc>1 && (arg = argv[1])[0]=='-') {
- switch (arg[1]) {
-
- case 'c':
- flag = '+';
- break;
-
- case 'r':
- flag = '-';
- break;
-
- case 'm':
- mailflg = 1;
- break;
- }
- argc--;
- argv++;
- }
- ident();
-
- if(argc == 1)
- copy(0);
- while(--argc) {
- arg = *++argv;
- if(flag == '+')
- goto cf;
- if(*arg == '/' && flag != '-') {
- card('F', arg);
- nact++;
- continue;
- }
- if(link(arg, lfname) < 0)
- goto cf;
- card('F', lfname);
- card('U', lfname);
- lfname[inchar]++;
- nact++;
- goto df;
-
- cf:
- f = open(arg, 0);
- if(f < 0) {
- printf("Cannot open %s\n", arg);
- continue;
- }
- copy(f);
- close(f);
-
- df:
- if(flag == '-') {
- f = unlink(arg);
- if(f < 0)
- printf("Cannot remove %s\n", arg);
- }
- }
-
- if(nact) {
- tfname[inchar]--;
- f = link(tfname, dfname);
- if(f < 0) {
- printf("Cannot rename %s\n", dfname);
- tfname[inchar]++;
- out();
- }
- unlink(tfname);
- execl("/etc/lpd", "lpd", 0);
- dfname[inchar]++;
- }
- out();
- }
-
- copy(f)
- int f;
- {
- int ff, i, nr, nc;
- static int buf[256];
-
- card('F', cfname);
- card('U', cfname);
- ff = nfile(cfname);
- nc = 0;
- nr = 0;
- while((i = read(f, buf, 512)) > 0) {
- write(ff, buf, i);
- nc =+ i;
- if(nc >= 512) {
- nc =- 512;
- nr++;
- if(nr > maxrec) {
- printf("Copy file is too large\n");
- break;
- }
- }
- }
- close(ff);
- nact++;
- }
-
- card(c, s)
- int c;
- char s[];
- {
- char *p1, *p2;
- static char buf[512];
- int col;
-
- p1 = buf;
- p2 = s;
- col = 0;
- *p1++ = c;
- while((c = *p2++) != '\0') {
- *p1++ = c;
- col++;
- }
- *p1++ = '\n';
- write(tff, buf, col+2);
- }
-
- ident()
- {
- int c, n;
- register char *b1p, *pp, *b2p;
- static char b1[100], b2[100];
-
- b1p = b1;
- if(getpw(getuid(), b1p)) {
- b1p = "pdp::::m0000,m000:";
- }
- n = 0;
- b2p = b2;
- while(*b2p++ = "$ ident "[n++]);
- b2p--;
- n = 5;
- while(--n) while(*b1p++ != ':');
- while((*b2p++ = *b1p++) != ':');
- b2p[-1] = ',';
- b1p = b1;
- pp = person;
- while((c = *b1p++) != ':') {
- *b2p++ = c;
- *pp++ = c;
- }
- *b2p++ = 0;
- *pp++ = 0;
- card('L', b2);
- if (mailflg)
- card('M', person);
- }
-
- pidfn()
- {
- register i, j, c;
- int p;
-
- p = getpid();
- i = 0;
- while(tfname[i] != 'X')
- i++;
- i =+ 4;
- for(j=0; j<5; j++) {
- c = (p%10) + '0';
- p =/ 10;
- tfname[i] = c;
- cfname[i] = c;
- lfname[i] = c;
- dfname[i] = c;
- i--;
- }
- inchar = i;
- }
-
- nfile(name)
- char *name;
- {
- register f;
-
- f = creat(name, 0666);
- if(f < 0) {
- printf("Cannot create %s\n", name);
- out();
- }
- name[inchar]++;
- return(f);
- }
-
- out()
- {
- register i;
-
- signal(1, 1);
- signal(1, 2);
- signal(1, 3);
- i = inchar;
- while(tfname[i] != 'a') {
- tfname[i]--;
- unlink(tfname);
- }
- while(cfname[i] != 'a') {
- cfname[i]--;
- unlink(cfname);
- }
- while(lfname[i] != 'a') {
- lfname[i]--;
- unlink(lfname);
- }
- while(dfname[i] != 'a') {
- dfname[i]--;
- unlink(dfname);
- }
- exit();
- }
-