Please consider a donation to the Higher Intellect project. See https://preterhuman.net/donate.php or the Donate to Higher Intellect page for more info. |
WinTaper 1.01 File Format
The file format is a _little_ haphazard due to modifications made and for backward compatibility's sake. Future formats will be better organized. Please don't make fun of my data structures. Most of them were written over two years ago and much has changed since then. Most of TAPEDATA's is manipulated by a derived class, which resides in the file wttape.dll. Hopefully soon I will release the necessary .LIB and .H files so any programmers using Borland C++ (or any language capable of calling a DLL compiled by BC++) will be able to tap into the prewritten routines for tape file manipulation built into WTTAPE.DLL.
-Dan Tepper 10/16/95
Dont forget all strings (char xxx[i]) are 0-terminated, thus the maximum string length for xxx is i-1 (then add the 0 terminator).
The first record (record 0) in a wtf file contains personal data, tape data starts with the second record (record 1). Personal data can be left blank (set to 0's)
/////////////////////////////////////////////////////////////////////// //this define maintains 16/32 bit compatibility by using //short instead of int when compiling for Win32, since //structures are read and written directly to disk and //the width (bytes) of the data fields must be the same //for both systems. By defining integers as shorts under //Win32 we can read 16bit integers from Win3.x correctly #if defined(__WIN32__) #define INTEGER SHORT #else #define INTEGER int #endif /////////////////////////////////////////////////////////////////////// //this typedef provides a wrapper around Windows' LOGFONT structure, //again for 32bit compatibility. Essentially, it types LOGFONT to //the 16bit flavor by using shorts instead of ints when under Win32 typedef struct wtLOGFONT { INTEGER lfHeight; // height in points INTEGER lfWidth; // NA - set to 0 INTEGER lfEscapement; // NA - set to 0 INTEGER lfOrientation; // NA - set to 0 INTEGER lfWeight; // NA - set to 0 BYTE lfItalic; // NA - set to 0 BYTE lfUnderline; // NA - set to 0 BYTE lfStrikeOut; // NA - set to 0 BYTE lfCharSet; // NA - set to 0 BYTE lfOutPrecision; // NA - set to 0 BYTE lfClipPrecision; // NA - set to 0 BYTE lfQuality; // NA - set to 0 BYTE lfPitchAndFamily; // NA - set to 0 char lfFaceName[LF_FACESIZE]; // typeface name (LF_FACESIZE=32) }; /////////////////////////////////////////////////////////////////////// //class defines a single song as a character string plus an integer //representing the jam code. This allows us to use an array of //onesongs later to represent the songlist class onesong { public: char songtitle[32] ; INTEGER guzinta ; // 0-xx= none,jams,fades,cuts,text,encore,encore2,cont'd,ending,n1,n2,n3,r1,r2,r3,...user codes }; class TAPEDATA { public: char band[21]; char date[9]; // stored as text: yyyymmdd ie: 19951031 = 10/31/95 char location[42]; char srcinitial; // internal use only (set to 0) - see "source" below INTEGER source; // 0-13= none,SBD,Aud,SBD+Aud,FMB,FMS,MTSB,MTS-Siml,CD,Alb,BootCD,BootAlb,studio,outtakes INTEGER tape1type; // 0-21= none,1,2,3,1st,2nd,3rd,Tape1,Tape2,Tape3,Part1,Part2,Part3,Early,Late,Matinee,Electric,Acoustic,Opener,Aritst,Encores,Conclusion INTEGER gen; // 0-25= none,DigMas,DigCopy,HiFiMas,HiFiCopy,AnlgMas,AnlgUnkwn,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,unknown INTEGER locationfontsize; // size in points of location on SPINE of label INTEGER sets; // 0=2tapes,1=tape1,2=tape2,3=OneLongTape,4=1Dat2Cass INTEGER tape2type; // 0-21= none,1,2,3,1st,2nd,3rd,Tape1,Tape2,Tape3,Part1,Part2,Part3,Early,Late,Matinee,Electric,Acoustic,Opener,Aritst,Encores,Conclusion INTEGER tape1time; // time in minutes 0-255 INTEGER tape2time; // time in minutes 0-255 INTEGER qualityID; // 0-14= 0=none, 1-14 as follows: 1=worst 14=best char tapeformat[2]; // 'C'=Cass,'D'=Dat,'V'=VHS,'8'=8mm,'B'=Beta,'R'=Reel struct onesong songlist[34]; // array of 34 onesongs char comment1[79]; char setinfo[2]; // internal use only - set to 0's char comment2[79]; INTEGER dolbyinfo; // 0-13 = none,B,C,dbx,SP,EP,SLP,30.5,44.1,48.0,3.75,7.5,15,30 INTEGER flip_1; // 1-17 = 1st song on side B tape 1 INTEGER flip_2; // 1-17 = 1st song on side B tape 2 char extra[2]; // internal use only - set to 0's wtLOGFONT DateFont; // note: lfHeight is used for size in points on label's SPINE wtLOGFONT LocationFont; // note: lfHeight is used for size in points on label's FRONT wtLOGFONT SongsFont; wtLOGFONT CommentsFont; wtLOGFONT SourceFont; wtLOGFONT BandFont; wtLOGFONT Extra1; // not used yet - Set to 0's char alphasort[20]; // if blank, sorts on "band" INTEGER isdeleted; // 0=NO, 1=YES INTEGER programnumber; // not used yet - Set to 0 char unusedbytes[26]; // not used yet - Set to 0's INTEGER datefontsize; // size in points of date on FRONT of label }; ================================================= == WTF 1.01 FILESPEC - FIELD OFFSETS IN BYTES == ================================================= class TAPEDATA { HEXADECIMAL DECIMAL (record size: 1819 bytes) start end start end field name ----- ---- ----- ---- --------------- 0000-0014 0- 20 char band[21]; 0015-001C 21- 29 char date[9]; 001D-0047 30- 71 char location[42]; 0048 72 char srcinitial; 0049-004A 73- 74 INTEGER source; 004B-004C 75- 76 INTEGER tape1type; 004D-004E 77- 78 INTEGER gen; 004F-0050 79- 80 INTEGER locationfontsize; 0051-0052 81- 82 INTEGER sets; 0053-0054 83- 84 INTEGER tape2type; 0055-0056 85- 86 INTEGER tape1time; 0057-0058 87- 88 INTEGER tape2time; 0059-005A 89- 90 INTEGER qualityID; 005B-005C 91- 92 char tapeformat[2]; 005D-04E0 93-1248 struct onesong songlist[34]; 04E1-052F 1249-1327 char comment1[79]; 0530-0531 1328-1329 char setinfo[2]; 0532-0580 1330-1408 char comment2[79]; 0581-0582 1409-1410 INTEGER dolbyinfo; 0583-0584 1411-1412 INTEGER flip_1; 0585-0586 1413-1414 INTEGER flip_2; 0587-0588 1415-1416 char extra[2]; 0589-05BA 1417-1466 wtLOGFONT DateFont; 05BB-05EC 1467-1516 wtLOGFONT LocationFont; 05ED-061E 1517-1566 wtLOGFONT SongsFont; 061F-0650 1567-1616 wtLOGFONT CommentsFont; 0651-0682 1617-1666 wtLOGFONT SourceFont; 0683-06B4 1667-1716 wtLOGFONT BandFont; 06B5-06E6 1717-1766 wtLOGFONT Extra1; 06E7-06FA 1767-1786 char alphasort[20]; 06FB-06FC 1787-1788 INTEGER isdeleted; 06FD-06FE 1789-1790 INTEGER programnumber; 06FF-0718 1791-1816 char unusedbytes[26]; 0719-071A 1817-1818 INTEGER datefontsize; }; ================================================= == WTF 1.01 - SUPPORT CLASS BYTE OFFSETS == ================================================= typedef struct wtLOGFONT : (total size: 50 bytes) { HEXADECIMAL DECIMAL start end start end field name 0000-0001 0- 1 INTEGER lfHeight; 0002-0003 2- 3 INTEGER lfWidth; 0004-0005 4- 5 INTEGER lfEscapement; 0006-0007 6- 7 INTEGER lfOrientation; 0008-0009 8- 9 INTEGER lfWeight; 000A 10 BYTE lfItalic; 000B 11 BYTE lfUnderline; 000C 12 BYTE lfStrikeOut; 000D 13 BYTE lfCharSet; 000E 14 BYTE lfOutPrecision; 000F 15 BYTE lfClipPrecision; 0010 16 BYTE lfQuality; 0011 17 BYTE lfPitchAndFamily; 0012-0031 18-49 char lfFaceName[32]; }; class onesong : (total size: 34 bytes) { HEXADECIMAL DECIMAL start end start end field name 0000-001F 0-31 char songtitle[32]; 0020-0021 32-33 INTEGER guzinta ; };