head 1.1; access; symbols; locks; strict; comment @# @; 1.1 date 2019.08.01.21.51.06; author wkt; state Exp; branches; next ; desc @@ 1.1 log @Initial revision @ text @.TH dtp 1L "Mar 1995" .SH NAME dtp \- extract/list the contents of a Unix dtp archive .SH SYNOPSIS .B dtp [ .B t|x ] .I filename .SH DESCRIPTION .B dtp takes the filename of a Unix dtp archive as its second argument, and either lists the contents of the archive, or extracts the contents of the archive to the current directory. The first argument is either a .B t or an .B x. .SH OPTIONS .TP .B t Produce a table of contents. .TP .B x Extract the archive's contents to the current directory. .SH ARCHIVE FORMAT A .I dtp archive is broken up into a number of 512-byte blocks. Block 0 contains the offset of the actual files' data, stored in a uint16_t at bytes 6 and 7. This value is converted to an offset in bytes as follows: .PP .nf offset = 64 * (256 * byte[6] + byte[7]); .fi .PP Block 1 begins the archive's table of contents. The table of contents is made up of a number of records with the following C structure: .PP .nf /* dtp tape directory entry */ struct tpdir { char pathname[114]; /* Filename of file */ uint16_t mode; /* Unix mode */ uint8_t uid; /* Owner of file */ uint8_t gid; /* Group of file */ uint8_t unused1; uint8_t size[3]; /* Size in bytes */ uint8_t modtime[4]; /* Time of last modification */ uint16_t tapeaddr; /* Beginning block on tape */ }; .fi .PP where .I uintXX_t indicates an unsigned integer .I XX bits wide. .PP The table of contents extends from Block 1 up to the data offset calculated above. Alternatively, the last record in the table of contents may be indicated by a 0 in the first byte of the .I pathname string. All blocks following this block contain the files in the archive. The .I tapeaddr field in each file entry points to the first block after the offset which contains the data for that file. Files are stored contiguously. Where a file is not a multiple of the block-size in size, it is padded with bytes so that it is a integral number of blocks. .SH BUGS .B dtp does not use the .I checksum field in the table of contents records. .PP .I mkdir -p is used to recursively make directory hierachies if they are needed. .SH "SEE ALSO" .BR tap (1L), .BR tp (1L), .BR itp (1L), .BR mkdir (1) .SH AUTHOR Warren Toomey wkt@@cs.adfa.edu.au @