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

From Higher Intellect Vintage Wiki

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 ;
};