
BRU TAPE FORMATS
----------------


Although the format of a BRU tape is complex, it is feasable to
read such tapes on other than an RSX system. The format is described
below, mainly as deduced from dumping parts of a short tape, and thus
should not be described as guaranteed.

80	VOL1	Ansi Volume label
512	NOBOOT	This volume does not contain a bootable system block,
		Obeyed if the tape is booted.
80	HDR1	ANSI file label for Backupset named
80	HDR2	ANSI file label 4144 byte max,internal carraige control
*TM*
80	BACKUP	Backupset label block, identifies disk dumped, date,time
512	BOOT	The boot block from the backed up disk, or NOBOOT again
512	HOME	The home block from the backed up disk.
80	UFD	UFD record for [0,0]
.....		Usually there are no directory blocks here, but if files
		such as RSX11.SYS etc exist in [0,0] directory, 
		blocks listing these appear here
80	UFD	UFD record for 1st directory
512*N	DIRECT	0..8 directory blocks per buffer, as read from the 
		above directory file.
repeat DIRECT until all directory blocks written
Repeat UFD/Direct combinations

80	HEAD	Block of 80 bytes (20*'HEAD') flags start of file headers
80	UFD	Repeat of UFD record for [0,0]
.....		Headers for files in [0,0] if any,
80	UFD	Repeat of first directory UFD record
512*N	HDRS	0..8 File headers of files in the above directory. as read
		from the disk.
repeat HDRS for all blocks in directory.
repeat for all above directories.

80	DATA	Block of 80 bytes (20*'DATA') flags start of data blocks.
48+512*N DAT	Usually 4144 bytes data block. 1..8 data blocks with 48
		byte prefix describing data

Data blocks repeat for all the above described files, then more directories
and headers, then the bodies of more files. Ends with

*TM*
80	EOF1	End of file mark for backupset
80	EOF2
*TM*
..................More backupsets
*TM*		Indicating end of tape.


The special format blocks are as follows:

UFD blocks.

0	.ASCIZ	/UFD/
	.BLKW	3			;Fileid,seqno,relvol#(=0)
	.BLKW	5			;Directory filename in rad50
					;and gen#, .RAD50 /000000   DIR/
					;.WORD	1
	.BLKW	1			;directory level[0,0]=0
					;users =1, SCS11 might have 2+
	.BLKW	2			;Size of directory HI,LO
	.BLKW	1			;owner uic for directory
	.BLKW	1			;protection for directory
	pad to 80 bytes with nulls.


Backupset label

0	.BLKB	12.			;Backupset name
	.BLKW	1			;backup volume set #(starts at 1)
					;index to reels of multireel tape sets
	.BLKB	12.			;disk name
	.BLKW	8.			;GTIM$ 8 word time block
					;YR MON DY HR MIN SEC TIC Ticks/sec
	.BLKW	1			;Indexfilesize or Max files?
	.BLKW	2			;Size of MFD[0,0]
	.BLKW	2			;HI,Lo size of orig disk
	.BLKB	2			;"DD - Device mnemonic
	.BLKW	1			;Index file position
	.BLKB	7			;DDMMMYY of dump
	.BLKB	6			;HHMMSS of dump
	.BYTE	0			;terminator
	pad to 80 bytes.


Directory blocks

16. byte fixed length records, each

	.BLKW	3	;Fileid, Fseqno, Relvolno(=0).
	.BLKW	4	;Rad50 /FILENAME EXT/
	.BLKW	1	;generation number.

A deleted or unused entry being one with the first word, the fileid,
set to zero.


Data blocks

	.BLKW	3	;File-id (1 word)
			;1-3 retrieval pointer relating to blocks
			;in this data buffer
	repeat up to a total 0f 8 3 word groups.
	If less than 8 groups, insert a null word as terminator.
	Pad to total of 24. words in header.
	Up to 8 data blocks, as described by retrieval pointers.

	Note the retrieval pointers are in the format

	.BYTE hi-disk-lbn
	.BYTE biased-count	;ie actual -1
	.WORD low-disk-lbn	;

	and relate to the logical blocks on the original disk,
	not to the file in any way.


Recovery of files from a BRU tape.

Read UFD records, creating UFDs as you pass. Use the directory 
entries, buffered, to create the files as you find matching file
headers, creating the files with the correct attributes including
size. The Fileid/seqno for the new files must be saved, along
with the old file-id, and a table of retrieval pointers built
relating disk lbns to file vbns. Since there is no guarantee that
files will occur as complete units, you must be able to switch to
the correct file to write the set of virtual blocks.
