From 598b9d8d252efa43f556b3a115c6a674b9b7e255 Mon Sep 17 00:00:00 2001 From: Tom London Date: Wed, 31 Jan 1979 02:40:23 -0500 Subject: [PATCH] Bell 32V development Work on file usr/src/cmd/mtm.c Co-Authored-By: John Reiser Synthesized-from: 32v --- usr/src/cmd/mtm.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 usr/src/cmd/mtm.c diff --git a/usr/src/cmd/mtm.c b/usr/src/cmd/mtm.c new file mode 100644 index 0000000000..3697bb9f89 --- /dev/null +++ b/usr/src/cmd/mtm.c @@ -0,0 +1,146 @@ +#include +/* 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); +} -- 2.20.1