1: /*
   2:  * Copyright (c) 1985 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: char copyright[] =
   9: "@(#) Copyright (c) 1985 Regents of the University of California.\n\
  10:  All rights reserved.\n";
  11: #endif not lint
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)tcopy.c	1.2 (Berkeley) 12/11/85";
  15: #endif not lint
  16: 
  17: #include <stdio.h>
  18: #include <signal.h>
  19: #include <sys/file.h>
  20: #include <sys/types.h>
  21: #include <sys/ioctl.h>
  22: #include <sys/mtio.h>
  23: 
  24: #define SIZE    (64 * 1024)
  25: 
  26: char buff[SIZE];
  27: int filen=1;
  28: long count, lcount;
  29: int RUBOUT();
  30: long itol();
  31: int nfile;
  32: long size, tsize;
  33: int ln;
  34: char *inf, *outf;
  35: int copy;
  36: 
  37: main(argc, argv)
  38: char **argv;
  39: {
  40:     register n, nw, inp, outp;
  41:     struct mtop op;
  42: 
  43:     if (argc <=1 || argc >= 3) {
  44:         fprintf(stderr, "Usage: tcopy src [dest]\n");
  45:         exit(1);
  46:     }
  47:     inf = argv[1];
  48:     if (argc == 3) {
  49:         outf = argv[2];
  50:         copy = 1;
  51:     }
  52:     if ((inp=open(inf, O_RDONLY, 0666)) < 0) {
  53:         fprintf(stderr,"Can't open %s\n", inf);
  54:         exit(1);
  55:     }
  56:     if (copy) {
  57:         if ((outp=open(outf, O_WRONLY, 0666)) < 0) {
  58:             fprintf(stderr,"Can't open %s\n", outf);
  59:             exit(3);
  60:         }
  61:     }
  62:     if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  63:         (void) signal(SIGINT, RUBOUT);
  64:     ln = -2;
  65:     for (;;) {
  66:         count++;
  67:         n = read(inp, buff, SIZE);
  68:         if (n > 0) {
  69:             nw = write(outp, buff, n);
  70:             if (copy) {
  71:                 if (nw != n) {
  72:                 fprintf(stderr, "write (%d) != read (%d)\n",
  73:                     nw, n);
  74:                 fprintf(stderr, "COPY Aborted\n");
  75:                 exit(5);
  76:                 }
  77:             }
  78:             size += n;
  79:             if (n != ln) {
  80:             if (ln > 0)
  81:                 if (count - lcount > 1)
  82:                 printf("file %d: records %ld to %ld: size %d\n",
  83:                     filen, lcount, count-1, ln);
  84:                 else
  85:                 printf("file %d: record %ld: size %d\n",
  86:                     filen, lcount, ln);
  87:             ln = n;
  88:             lcount = count;
  89:             }
  90:         }
  91:         else {
  92:             if (ln <= 0 && ln != -2) {
  93:                 printf("eot\n");
  94:                 break;
  95:             }
  96:             if (ln > 0)
  97:                 if (count - lcount > 1)
  98:                 printf("file %d: records %ld to %ld: size %d\n",
  99:                     filen, lcount, count-1, ln);
 100:                 else
 101:                 printf("file %d: record %ld: size %d\n",
 102:                     filen, lcount, ln);
 103:             printf("file %d: eof after %ld records: %ld bytes\n",
 104:                 filen, count-1, size);
 105:             if (copy) {
 106:                 op.mt_op = MTWEOF;
 107:                 op.mt_count = (daddr_t)1;
 108:                 if(ioctl(outp, MTIOCTOP, (char *)&op) < 0) {
 109:                     perror("Write EOF");
 110:                     exit(6);
 111:                 }
 112:             }
 113:             filen++;
 114:             count = 0;
 115:             lcount = 0;
 116:             tsize += size;
 117:             size = 0;
 118:             if (nfile && filen > nfile)
 119:                 break;
 120:             ln = n;
 121:         }
 122:     }
 123:     if (copy)
 124:         (void) close(outp);
 125:     printf("total length: %ld bytes\n", tsize);
 126: }
 127: 
 128: RUBOUT()
 129: {
 130:     if (count > lcount)
 131:         --count;
 132:     if (count)
 133:         if (count > lcount)
 134:             printf("file %d: records %ld to %ld: size %d\n",
 135:                 filen, lcount, count, ln);
 136:         else
 137:             printf("file %d: record %ld: size %d\n",
 138:                 filen, lcount, ln);
 139:     printf("rubout at file %d: record %ld\n", filen, count);
 140:     printf("total length: %ld bytes\n", tsize+size);
 141:     exit(1);
 142: }

Defined functions

RUBOUT defined in line 128; used 2 times
main defined in line 37; never used

Defined variables

buff defined in line 26; used 2 times
copy defined in line 35; used 5 times
copyright defined in line 8; never used
count defined in line 28; used 14 times
filen defined in line 27; used 10 times
inf defined in line 34; used 3 times
lcount defined in line 28; used 12 times
ln defined in line 33; used 14 times
nfile defined in line 31; used 2 times
  • in line 118(2)
outf defined in line 34; used 3 times
sccsid defined in line 14; never used
size defined in line 32; used 5 times
tsize defined in line 32; used 3 times

Defined macros

SIZE defined in line 24; used 2 times
Last modified: 1986-01-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 615
Valid CSS Valid XHTML 1.0 Strict