Hi Rob Is there source available for this program ? I'd like to understand how it ticks under the hood.
Thanks, Jason -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Rob Jarratt Sent: Sunday, 28 March 2010 3:00 PM To: 'Edward Berry'; [email protected] Subject: Re: [Simh] Converting VMS BACKUP saveset file to SIMH tape file The program I wrote will take a binary file and make a SIMH .TAP file out of it. I have used this to make BACKUP tapes from BACKUP files I have on the PC. I have posted the executable and its DLL here: https://cid-fc758a5a91b91301.skydrive.live.com/browse.aspx/Public/VirtualTap e. please note that the program requires the .NET Framework 2.0 to be installed. To be honest I have forgotten how to use it. I think you select the name of the .TAP file, select a label and then press the Write ANSI button to select the files to put on tape. Regards Rob > -----Original Message----- > From: [email protected] [mailto:simh-boun...@trailing- > edge.com] On Behalf Of Edward Berry > Sent: 28 March 2010 19:25 > Cc: [email protected] > Subject: Re: [Simh] Converting VMS BACKUP saveset file to SIMH tape > file > > Rob Jarratt wrote: > > I have some C# code which may do this. If I can find the code would > you > > like to give it a go? > > > > Regards > > > > Rob > > I would also be interested in getting the code if it resurfaces! > Does it make a disk file to mount on simh, or a saveset to FTP into > the simulated filesystem and read as a disk-based saveset? > > > I've been dd'ing the savesets from exabyte tapes written by VMS > to linux (which I realize may not be the same thing as FTP'ing a disk- > based saveset) > This requires dividing the file into blocks (see simh_magtape.pdf > on trailing edge website). For small savesets I was able to use > Helbig's enblock.c: > > http://www.ba-stuttgart.de/~helbig/os/v6/enblock.c > with some description at > http://minnie.tuhs.org/pipermail/tuhs/2003-June/000612.html > > but for large files it was flakey - saveset came out a different size > each time I ran it. > Then I found that using fortran to read the saveset image unformatted > with the correct record length and write it out again, has the same > effect of blocking the records. > > Then the saveset had to be combined with its header and footer (also > dd'd > from the vaxtape), and if it was not the first saveset the header had > to be prepended with the tape label from the first set. I realize > this is quite different from what the original poster is doing, > but in case anyone needs to restore vax tapes to disk images for > simh I'll put the procedure and code below. > > > ======================================================================= > ====== > Restoring vax tapes for simh on a linux machine > Tape drive for reading the tapes: exabyte eliant > > script for reading tape files to disk (cd to an empty directory before > running) > ----------------------------------- > ddvaxtape.csh: > #!/bin/csh -ef > #mt -f /dev/nst0 rewind > mt -f /dev/nst0 setblk 0 > foreach nmbr (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 > \ > 23 24 25 26 27 28 29 30) > dd if=/dev/nst0 bs=80 of=hdr${nmbr}.dat > if $nmbr == 1 then > head -c40 hdr${nmbr}.dat |awk '{print $1}' > head -c160 hdr${nmbr}.dat |tail -c80 |awk '{print $1,$2}' > else > head -c40 hdr${nmbr}.dat |awk '{print $1,$2}' > #cat hdr${nmbr}.dat |awk '{print $1,$2}' > endif > #dd if=/dev/nst0 bs=32768 of=saveset${nmbr}.dat > dd if=/dev/nst0 bs=65536 of=saveset${nmbr}.dat > head -c428 saveset${nmbr}.dat |tail -c135 > #head -c444 saveset1.dat |tail -c151 > echo > #dd if=/dev/nst0 bs=0 of=saveset${nmbr}.dat > dd if=/dev/nst0 bs=80 of=tail${nmbr}.dat > mt -f /dev/nst0 status > #if $status break > end > exit > If the tape has more than 30 savesets, after it finishes > create a subdirectory and run the program again there > without the rewind instruction. > > To list the savesets in each file: > grep EOF tail*.dat > > tail10.dat:EOF1RAXISD1. BCD3 00010010000100 91353 91353 > 001208DECVMSBACKUP > EOF2F3276832768 M 00 > tail11.dat:EOF1RAXIS2.BCK BCD3 00010011000100 92024 92024 > 001208DECVMSBACKUP > EOF2F3276832768 M 00 > tail12.dat:EOF1BCIIA.MRC BCD3 00010012000100 92025 92025 > 000311DECVMSBACKUP > EOF2F3276832768 M 00 > ------------------------------------ > This produces 3 files for each saveset: hdr##.dat, saveset##.dat, and > tail##.dat > The first header is longer because it starts with the tape label. > The saveset##.dat files can be listed and extracted on the linux > host using the vmsbu utility. > > To use with simh they need to be blocked and recombined with tape > label, head, and tail. > http://www.ba-stuttgart.de/~helbig/os/v6/enblock.c will block small > files > (or maybe files with small reclength), but for the savesets with > reclength 32768 I used a fortran snippet (real hack, the file names are > coded in! > Also I think you need to redimension (character*32768 line) to match > the > reclen param the tape was written with.): > > c****writing in unformatted mode automatically wraps each record in 4- > byte integers giving > record size. > c record size can be variable > c > INTEGER*4 IR > character*32768 line > OPEN (UNIT=2,FILE='saveset19.dat',STATUS='OLD',recl=32768, > . form='unformatted',access='direct') > OPEN (UNIT=3,FILE='saveset19.tpe',STATUS='unknown', > . form='unformatted',access='sequential') > DO 77 IR = 1,50000 > 3 READ(2,rec=ir,err=777) LINE > write(6,*) ir > write(unit=3) (LINE) > 77 continue > 777 close (3) > end > > (This works when compiled with g77 fortran. I just tried gfortran and > the file > comes out larger by about one byte per record, so I suppose it won't > work) > > > now putting it all together ("enblock" here is Helbig's enblock, and > saveset19.tpe is the output of the fortran blocking): > > #get the tapelabel, from first header, blocked, first 88 bytes: > cat hdr1.dat | enblock 80 > temp.dat > dd if=temp.dat count=88 bs=1 > $syn/simh/VAX/allback.tpe > #append the appropriate header: > cat hdr19.dat |enblock 80 >> $syn/simh/VAX/allback.tpe > #append the saveset: > cat saveset19.tpe >> $syn/simh/VAX/allback.tpe > #put end-of-file label?: > dd if=/dev/zero bs=1 count=4 >> $syn/simh/VAX/allback.tpe > #append the tail > cat tail19.dat | enblock 80 >> $syn/simh/VAX/allback.tpe > #put extra 4 zero's for end-of-tape > dd if=/dev/zero bs=1 count=4 >> $syn/simh/VAX/allback.tpe > > #mount it on simh! > attach tq2 allback.tpe > c > BACKUP/List/rewind mua2: > _______________________________________________ > Simh mailing list > [email protected] > http://mailman.trailing-edge.com/mailman/listinfo/simh _______________________________________________ Simh mailing list [email protected] http://mailman.trailing-edge.com/mailman/listinfo/simh _______________________________________________ Simh mailing list [email protected] http://mailman.trailing-edge.com/mailman/listinfo/simh
