Bell 32V development
authorTom London <tbl@research.uucp>
Wed, 31 Jan 1979 07:40:23 +0000 (02:40 -0500)
committerTom London <tbl@research.uucp>
Wed, 31 Jan 1979 07:40:23 +0000 (02:40 -0500)
Work on file usr/src/cmd/mtm.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/cmd/mtm.c [new file with mode: 0644]

diff --git a/usr/src/cmd/mtm.c b/usr/src/cmd/mtm.c
new file mode 100644 (file)
index 0000000..3697bb9
--- /dev/null
@@ -0,0 +1,146 @@
+#include <signal.h>
+/* Magnetic Tape Manipulation Program
+** mtm [-sn] [-lm] [-bp] [unit]
+**
+** skip n files
+** list m files
+** buffer size pK bytes
+** on unit 
+**
+** Assumes definition of raw magnetic tapes and the 
+** mapping of 4-7 into physical drives 0-3
+*/
+char *buf;
+int bcnt;
+int filecnt;
+int fd;
+int unit;
+char *file ;
+
+main(argc,argv)
+int argc;
+char *argv[];
+{
+       char *p;
+       int nskip, nlist, skip, list;
+       int finis();
+
+       signal(SIGINT,finis);
+       signal(SIGQUIT,finis);
+       unit = nskip = nlist = 0;
+       skip = 0;
+       list = 1;
+       bcnt = 2;
+       file = "/dev/rmt0 ";
+       filecnt=1;
+       argv++;
+
+       while(--argc) {
+               p = *argv++;
+               if(*p == '-'){
+                       ++p;
+                       switch(*p){
+
+                       case 's':
+                               skip++;
+                               list--;
+                               nskip = atoi(++p);
+                               break;
+       
+                       case 'l':
+                               list++;
+                               nlist = atoi(++p);
+                               break;
+       
+                       case 'b':
+                               bcnt = atoi(++p);
+                               if(bcnt < 30) break;
+                               printf("Requested buffer too big %dK\n",bcnt);
+                               exit(8);
+                       default:
+                               printf("Bad option\n");
+                               exit(8);
+                       }
+               }
+               else{
+
+                       if((*p < '0') || (*p> '9')){
+                               printf("Syntax Error\n");
+                               exit(8);
+                       }
+                       unit = atoi(p);
+               }
+       }
+
+       bcnt = bcnt<<10;
+       if (((int)(buf = sbrk(bcnt))) < 0) {
+               printf("requested buffer too big - %dK\n",bcnt);
+               exit(8);
+       }
+
+       unit = unit | 04;       /* force to no rewind unit number */
+       sprintf(&file[8],"%d",unit);
+       if((fd = open(file, 0)) < 0) {
+               printf("Tape Open Error %s\n",file);
+               exit(8);
+       }
+
+       if(skip)
+               files(nskip,0);
+       if(list){
+               if(nlist == 0)
+                       nlist = -1;
+               files(nlist,1);
+               finis();
+       }
+}
+
+files(nfiles,lflag)
+int nfiles, lflag;
+{
+       int cnt, prevcnt, reccnt, eof;
+       if(nfiles == 0)return;
+       eof=0;
+       for(; nfiles--; filecnt++){
+               cnt = reccnt = prevcnt = 0;
+               do{
+                       prevcnt = cnt;
+                       if((cnt = read(fd,buf,bcnt)) == 0){     /* EOF */
+                               if(eof){        /* double eof */
+                                       printf("Double EOF after file %d\n",
+                                               --filecnt);
+                                       finis();
+                               }
+                               else{
+                                       eof=1;
+                                       if(lflag)
+                                               printf("      %d Records\n",reccnt);
+                               }
+                       }
+                       else{
+                               eof = 0;
+                               if((++reccnt == 1) && lflag) printf("File %d:\n",filecnt);
+                               if(cnt<0){      /* error */
+                                       if(lflag) printf("      Record %d - ERROR\n",reccnt);
+                               }
+                               else{   /*data read*/
+                                       if(lflag && cnt != prevcnt)
+                                               printf("      Record %d - %d bytes\n",
+                                                       reccnt,cnt);
+                               }
+                       }
+               }while(eof==0);
+       }
+}
+
+
+finis()
+{
+       unit -= 4;
+       sprintf(&file[8],"%d",unit);
+       close(fd);
+       fd = open(file, 0);
+       close(fd);
+       printf("DONE\n");
+       exit(0);
+}