1 #ifndef _ITDEFS_H_
2 #define _ITDEFS_H_
3 
4 #pragma pack(1)
5 
6 typedef struct tagITFILEHEADER
7 {
8 	DWORD id;			// 0x4D504D49
9 	CHAR songname[26];
10 	WORD reserved1;		// 0x1004
11 	WORD ordnum;
12 	WORD insnum;
13 	WORD smpnum;
14 	WORD patnum;
15 	WORD cwtv;
16 	WORD cmwt;
17 	WORD flags;
18 	WORD special;
19 	BYTE globalvol;
20 	BYTE mv;
21 	BYTE speed;
22 	BYTE tempo;
23 	BYTE sep;
24 	BYTE zero;
25 	WORD msglength;
26 	DWORD msgoffset;
27 	DWORD reserved2;
28 	BYTE chnpan[64];
29 	BYTE chnvol[64];
30 } ITFILEHEADER;
31 
32 
33 typedef struct tagITENVELOPE
34 {
35 	BYTE flags;
36 	BYTE num;
37 	BYTE lpb;
38 	BYTE lpe;
39 	BYTE slb;
40 	BYTE sle;
41 	BYTE data[25*3];
42 	BYTE reserved;
43 } ITENVELOPE;
44 
45 // Old Impulse Instrument Format (cmwt < 0x200)
46 typedef struct tagITOLDINSTRUMENT
47 {
48 	DWORD id;			// IMPI = 0x49504D49
49 	CHAR filename[12];	// DOS file name
50 	BYTE zero;
51 	BYTE flags;
52 	BYTE vls;
53 	BYTE vle;
54 	BYTE sls;
55 	BYTE sle;
56 	WORD reserved1;
57 	WORD fadeout;
58 	BYTE nna;
59 	BYTE dnc;
60 	WORD trkvers;
61 	BYTE nos;
62 	BYTE reserved2;
63 	CHAR name[26];
64 	WORD reserved3[3];
65 	BYTE keyboard[240];
66 	BYTE volenv[200];
67 	BYTE nodes[50];
68 } ITOLDINSTRUMENT;
69 
70 
71 // Impulse Instrument Format
72 typedef struct tagITINSTRUMENT
73 {
74 	DWORD id;
75 	CHAR filename[12];
76 	BYTE zero;
77 	BYTE nna;
78 	BYTE dct;
79 	BYTE dca;
80 	WORD fadeout;
81 	signed char pps;
82 	BYTE ppc;
83 	BYTE gbv;
84 	BYTE dfp;
85 	BYTE rv;
86 	BYTE rp;
87 	WORD trkvers;
88 	BYTE nos;
89 	BYTE reserved1;
90 	CHAR name[26];
91 	BYTE ifc;
92 	BYTE ifr;
93 	BYTE mch;
94 	BYTE mpr;
95 	WORD mbank;
96 	BYTE keyboard[240];
97 	ITENVELOPE volenv;
98 	ITENVELOPE panenv;
99 	ITENVELOPE pitchenv;
100 	BYTE dummy[4]; // was 7, but IT v2.17 saves 554 bytes
101 } ITINSTRUMENT;
102 
103 
104 // IT Sample Format
105 typedef struct ITSAMPLESTRUCT
106 {
107 	DWORD id;		// 0x53504D49
108 	CHAR filename[12];
109 	BYTE zero;
110 	BYTE gvl;
111 	BYTE flags;
112 	BYTE vol;
113 	CHAR name[26];
114 	BYTE cvt;
115 	BYTE dfp;
116 	DWORD length;
117 	DWORD loopbegin;
118 	DWORD loopend;
119 	DWORD C5Speed;
120 	DWORD susloopbegin;
121 	DWORD susloopend;
122 	DWORD samplepointer;
123 	BYTE vis;
124 	BYTE vid;
125 	BYTE vir;
126 	BYTE vit;
127 } ITSAMPLESTRUCT;
128 
129 #pragma pack()
130 
131 extern BYTE autovibit2xm[8];
132 extern BYTE autovibxm2it[8];
133 
134 #endif
135