Merge branch 'master' into divVerent/crypto2
[xonotic/xonotic.git] / misc / builddeps / dp.linux64 / include / libmodplug / sndfile.h
1 /*
2  * This source code is public domain.
3  *
4  * Authors: Olivier Lapicque <olivierl@jps.net>,
5  *          Adam Goode       <adam@evdebs.org> (endian and char fixes for PPC)
6 */
7
8 #if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
9 #include "config.h"
10 #define CONFIG_H_INCLUDED 1
11 #endif
12
13 #ifndef __SNDFILE_H
14 #define __SNDFILE_H
15
16 #ifdef UNDER_CE
17 int _strnicmp(const char *str1,const char *str2, int n);
18 #endif
19
20 #ifndef LPCBYTE
21 typedef const BYTE * LPCBYTE;
22 #endif
23
24 #define MOD_AMIGAC2                     0x1AB
25 #define MAX_SAMPLE_LENGTH       16000000
26 #define MAX_SAMPLE_RATE         192000
27 #define MAX_ORDERS                      256
28 #define MAX_PATTERNS            240
29 #define MAX_SAMPLES                     240
30 #define MAX_INSTRUMENTS         MAX_SAMPLES
31 #ifdef MODPLUG_FASTSOUNDLIB
32 #define MAX_CHANNELS            80
33 #else
34 #define MAX_CHANNELS            128
35 #endif
36 #define MAX_BASECHANNELS        64
37 #define MAX_ENVPOINTS           32
38 #define MIN_PERIOD                      0x0020
39 #define MAX_PERIOD                      0xFFFF
40 #define MAX_PATTERNNAME         32
41 #define MAX_CHANNELNAME         20
42 #define MAX_INFONAME            80
43 #define MAX_EQ_BANDS            6
44 #define MAX_MIXPLUGINS          8
45
46
47 #define MOD_TYPE_NONE           0x00
48 #define MOD_TYPE_MOD            0x01
49 #define MOD_TYPE_S3M            0x02
50 #define MOD_TYPE_XM                     0x04
51 #define MOD_TYPE_MED            0x08
52 #define MOD_TYPE_MTM            0x10
53 #define MOD_TYPE_IT                     0x20
54 #define MOD_TYPE_669            0x40
55 #define MOD_TYPE_ULT            0x80
56 #define MOD_TYPE_STM            0x100
57 #define MOD_TYPE_FAR            0x200
58 #define MOD_TYPE_WAV            0x400
59 #define MOD_TYPE_AMF            0x800
60 #define MOD_TYPE_AMS            0x1000
61 #define MOD_TYPE_DSM            0x2000
62 #define MOD_TYPE_MDL            0x4000
63 #define MOD_TYPE_OKT            0x8000
64 #define MOD_TYPE_MID            0x10000
65 #define MOD_TYPE_DMF            0x20000
66 #define MOD_TYPE_PTM            0x40000
67 #define MOD_TYPE_DBM            0x80000
68 #define MOD_TYPE_MT2            0x100000
69 #define MOD_TYPE_AMF0           0x200000
70 #define MOD_TYPE_PSM            0x400000
71 #define MOD_TYPE_J2B            0x800000
72 #define MOD_TYPE_ABC            0x1000000
73 #define MOD_TYPE_PAT            0x2000000
74 #define MOD_TYPE_UMX            0x80000000 // Fake type
75 #define MAX_MODTYPE             24
76
77
78
79 // Channel flags:
80 // Bits 0-7:    Sample Flags
81 #define CHN_16BIT               0x01
82 #define CHN_LOOP                0x02
83 #define CHN_PINGPONGLOOP        0x04
84 #define CHN_SUSTAINLOOP         0x08
85 #define CHN_PINGPONGSUSTAIN     0x10
86 #define CHN_PANNING             0x20
87 #define CHN_STEREO              0x40
88 #define CHN_PINGPONGFLAG        0x80
89 // Bits 8-31:   Channel Flags
90 #define CHN_MUTE                0x100
91 #define CHN_KEYOFF              0x200
92 #define CHN_NOTEFADE            0x400
93 #define CHN_SURROUND            0x800
94 #define CHN_NOIDO               0x1000
95 #define CHN_HQSRC               0x2000
96 #define CHN_FILTER              0x4000
97 #define CHN_VOLUMERAMP          0x8000
98 #define CHN_VIBRATO             0x10000
99 #define CHN_TREMOLO             0x20000
100 #define CHN_PANBRELLO           0x40000
101 #define CHN_PORTAMENTO          0x80000
102 #define CHN_GLISSANDO           0x100000
103 #define CHN_VOLENV              0x200000
104 #define CHN_PANENV              0x400000
105 #define CHN_PITCHENV            0x800000
106 #define CHN_FASTVOLRAMP         0x1000000
107 #define CHN_EXTRALOUD           0x2000000
108 #define CHN_REVERB              0x4000000
109 #define CHN_NOREVERB            0x8000000
110
111
112 #define ENV_VOLUME              0x0001
113 #define ENV_VOLSUSTAIN          0x0002
114 #define ENV_VOLLOOP             0x0004
115 #define ENV_PANNING             0x0008
116 #define ENV_PANSUSTAIN          0x0010
117 #define ENV_PANLOOP             0x0020
118 #define ENV_PITCH               0x0040
119 #define ENV_PITCHSUSTAIN        0x0080
120 #define ENV_PITCHLOOP           0x0100
121 #define ENV_SETPANNING          0x0200
122 #define ENV_FILTER              0x0400
123 #define ENV_VOLCARRY            0x0800
124 #define ENV_PANCARRY            0x1000
125 #define ENV_PITCHCARRY          0x2000
126
127 #define CMD_NONE                        0
128 #define CMD_ARPEGGIO                    1
129 #define CMD_PORTAMENTOUP                2
130 #define CMD_PORTAMENTODOWN              3
131 #define CMD_TONEPORTAMENTO              4
132 #define CMD_VIBRATO                     5
133 #define CMD_TONEPORTAVOL                6
134 #define CMD_VIBRATOVOL                  7
135 #define CMD_TREMOLO                     8
136 #define CMD_PANNING8                    9
137 #define CMD_OFFSET                      10
138 #define CMD_VOLUMESLIDE                 11
139 #define CMD_POSITIONJUMP                12
140 #define CMD_VOLUME                      13
141 #define CMD_PATTERNBREAK                14
142 #define CMD_RETRIG                      15
143 #define CMD_SPEED                       16
144 #define CMD_TEMPO                       17
145 #define CMD_TREMOR                      18
146 #define CMD_MODCMDEX                    19
147 #define CMD_S3MCMDEX                    20
148 #define CMD_CHANNELVOLUME               21
149 #define CMD_CHANNELVOLSLIDE             22
150 #define CMD_GLOBALVOLUME                23
151 #define CMD_GLOBALVOLSLIDE              24
152 #define CMD_KEYOFF                      25
153 #define CMD_FINEVIBRATO                 26
154 #define CMD_PANBRELLO                   27
155 #define CMD_XFINEPORTAUPDOWN            28
156 #define CMD_PANNINGSLIDE                29
157 #define CMD_SETENVPOSITION              30
158 #define CMD_MIDI                        31
159
160
161 // Volume Column commands
162 #define VOLCMD_VOLUME                   1
163 #define VOLCMD_PANNING                  2
164 #define VOLCMD_VOLSLIDEUP               3
165 #define VOLCMD_VOLSLIDEDOWN             4
166 #define VOLCMD_FINEVOLUP                5
167 #define VOLCMD_FINEVOLDOWN              6
168 #define VOLCMD_VIBRATOSPEED             7
169 #define VOLCMD_VIBRATO                  8
170 #define VOLCMD_PANSLIDELEFT             9
171 #define VOLCMD_PANSLIDERIGHT            10
172 #define VOLCMD_TONEPORTAMENTO           11
173 #define VOLCMD_PORTAUP                  12
174 #define VOLCMD_PORTADOWN                13
175
176 #define RSF_16BIT               0x04
177 #define RSF_STEREO              0x08
178
179 #define RS_PCM8S                0       // 8-bit signed
180 #define RS_PCM8U                1       // 8-bit unsigned
181 #define RS_PCM8D                2       // 8-bit delta values
182 #define RS_ADPCM4               3       // 4-bit ADPCM-packed
183 #define RS_PCM16D               4       // 16-bit delta values
184 #define RS_PCM16S               5       // 16-bit signed
185 #define RS_PCM16U               6       // 16-bit unsigned
186 #define RS_PCM16M               7       // 16-bit motorola order
187 #define RS_STPCM8S              (RS_PCM8S|RSF_STEREO)  // stereo 8-bit signed
188 #define RS_STPCM8U              (RS_PCM8U|RSF_STEREO)  // stereo 8-bit unsigned
189 #define RS_STPCM8D              (RS_PCM8D|RSF_STEREO)  // stereo 8-bit delta values
190 #define RS_STPCM16S             (RS_PCM16S|RSF_STEREO) // stereo 16-bit signed
191 #define RS_STPCM16U             (RS_PCM16U|RSF_STEREO) // stereo 16-bit unsigned
192 #define RS_STPCM16D             (RS_PCM16D|RSF_STEREO) // stereo 16-bit delta values
193 #define RS_STPCM16M             (RS_PCM16M|RSF_STEREO) // stereo 16-bit signed big endian
194 // IT 2.14 compressed samples
195 #define RS_IT2148               0x10
196 #define RS_IT21416              0x14
197 #define RS_IT2158               0x12
198 #define RS_IT21516              0x16
199 // AMS Packed Samples
200 #define RS_AMS8                 0x11
201 #define RS_AMS16                0x15
202 // DMF Huffman compression
203 #define RS_DMF8                 0x13
204 #define RS_DMF16                0x17
205 // MDL Huffman compression
206 #define RS_MDL8                 0x20
207 #define RS_MDL16                0x24
208 #define RS_PTM8DTO16    0x25
209 // Stereo Interleaved Samples
210 #define RS_STIPCM8S             (RS_PCM8S|0x40|RSF_STEREO)      // stereo 8-bit signed
211 #define RS_STIPCM8U             (RS_PCM8U|0x40|RSF_STEREO)      // stereo 8-bit unsigned
212 #define RS_STIPCM16S    (RS_PCM16S|0x40|RSF_STEREO)     // stereo 16-bit signed
213 #define RS_STIPCM16U    (RS_PCM16U|0x40|RSF_STEREO)     // stereo 16-bit unsigned
214 #define RS_STIPCM16M    (RS_PCM16M|0x40|RSF_STEREO)     // stereo 16-bit signed big endian
215 // 24-bit signed
216 #define RS_PCM24S               (RS_PCM16S|0x80)                        // mono 24-bit signed
217 #define RS_STIPCM24S    (RS_PCM16S|0x80|RSF_STEREO)     // stereo 24-bit signed
218 #define RS_PCM32S               (RS_PCM16S|0xC0)                        // mono 24-bit signed
219 #define RS_STIPCM32S    (RS_PCM16S|0xC0|RSF_STEREO)     // stereo 24-bit signed
220
221 // NNA types
222 #define NNA_NOTECUT             0
223 #define NNA_CONTINUE    1
224 #define NNA_NOTEOFF             2
225 #define NNA_NOTEFADE    3
226
227 // DCT types
228 #define DCT_NONE                0
229 #define DCT_NOTE                1
230 #define DCT_SAMPLE              2
231 #define DCT_INSTRUMENT  3
232
233 // DNA types
234 #define DNA_NOTECUT             0
235 #define DNA_NOTEOFF             1
236 #define DNA_NOTEFADE    2
237
238 // Mixer Hardware-Dependent features
239 #define SYSMIX_ENABLEMMX        0x01
240 #define SYSMIX_WINDOWSNT        0x02
241 #define SYSMIX_SLOWCPU          0x04
242 #define SYSMIX_FASTCPU          0x08
243
244 // Module flags
245 #define SONG_EMBEDMIDICFG       0x0001
246 #define SONG_FASTVOLSLIDES      0x0002
247 #define SONG_ITOLDEFFECTS       0x0004
248 #define SONG_ITCOMPATMODE       0x0008
249 #define SONG_LINEARSLIDES       0x0010
250 #define SONG_PATTERNLOOP        0x0020
251 #define SONG_STEP                       0x0040
252 #define SONG_PAUSED                     0x0080
253 #define SONG_FADINGSONG         0x0100
254 #define SONG_ENDREACHED         0x0200
255 #define SONG_GLOBALFADE         0x0400
256 #define SONG_CPUVERYHIGH        0x0800
257 #define SONG_FIRSTTICK          0x1000
258 #define SONG_MPTFILTERMODE      0x2000
259 #define SONG_SURROUNDPAN        0x4000
260 #define SONG_EXFILTERRANGE      0x8000
261 #define SONG_AMIGALIMITS        0x10000
262
263 // Global Options (Renderer)
264 #define SNDMIX_REVERSESTEREO    0x0001
265 #define SNDMIX_NOISEREDUCTION   0x0002
266 #define SNDMIX_AGC                              0x0004
267 #define SNDMIX_NORESAMPLING             0x0008
268 #define SNDMIX_HQRESAMPLER              0x0010
269 #define SNDMIX_MEGABASS                 0x0020
270 #define SNDMIX_SURROUND                 0x0040
271 #define SNDMIX_REVERB                   0x0080
272 #define SNDMIX_EQ                               0x0100
273 #define SNDMIX_SOFTPANNING              0x0200
274 #define SNDMIX_ULTRAHQSRCMODE   0x0400
275 // Misc Flags (can safely be turned on or off)
276 #define SNDMIX_DIRECTTODISK             0x10000
277 #define SNDMIX_ENABLEMMX                0x20000
278 #define SNDMIX_NOBACKWARDJUMPS  0x40000
279 #define SNDMIX_MAXDEFAULTPAN    0x80000 // Used by the MOD loader
280
281
282 // Reverb Types (GM2 Presets)
283 enum {
284         REVERBTYPE_SMALLROOM,
285         REVERBTYPE_MEDIUMROOM,
286         REVERBTYPE_LARGEROOM,
287         REVERBTYPE_SMALLHALL,
288         REVERBTYPE_MEDIUMHALL,
289         REVERBTYPE_LARGEHALL,
290         NUM_REVERBTYPES
291 };
292
293
294 enum {
295         SRCMODE_NEAREST,
296         SRCMODE_LINEAR,
297         SRCMODE_SPLINE,
298         SRCMODE_POLYPHASE,
299         NUM_SRC_MODES
300 };
301
302
303 // Sample Struct
304 typedef struct _MODINSTRUMENT
305 {
306         UINT nLength,nLoopStart,nLoopEnd;
307         UINT nSustainStart, nSustainEnd;
308         signed char *pSample;
309         UINT nC4Speed;
310         WORD nPan;
311         WORD nVolume;
312         WORD nGlobalVol;
313         WORD uFlags;
314         signed char RelativeTone;
315         signed char nFineTune;
316         BYTE nVibType;
317         BYTE nVibSweep;
318         BYTE nVibDepth;
319         BYTE nVibRate;
320         CHAR name[22];
321 } MODINSTRUMENT;
322
323
324 // Instrument Struct
325 typedef struct _INSTRUMENTHEADER
326 {
327         UINT nFadeOut;
328         DWORD dwFlags;
329         WORD nGlobalVol;
330         WORD nPan;
331         WORD VolPoints[MAX_ENVPOINTS];
332         WORD PanPoints[MAX_ENVPOINTS];
333         WORD PitchPoints[MAX_ENVPOINTS];
334         BYTE VolEnv[MAX_ENVPOINTS];
335         BYTE PanEnv[MAX_ENVPOINTS];
336         BYTE PitchEnv[MAX_ENVPOINTS];
337         BYTE Keyboard[128];
338         BYTE NoteMap[128];
339
340         BYTE nVolEnv;
341         BYTE nPanEnv;
342         BYTE nPitchEnv;
343         BYTE nVolLoopStart;
344         BYTE nVolLoopEnd;
345         BYTE nVolSustainBegin;
346         BYTE nVolSustainEnd;
347         BYTE nPanLoopStart;
348         BYTE nPanLoopEnd;
349         BYTE nPanSustainBegin;
350         BYTE nPanSustainEnd;
351         BYTE nPitchLoopStart;
352         BYTE nPitchLoopEnd;
353         BYTE nPitchSustainBegin;
354         BYTE nPitchSustainEnd;
355         BYTE nNNA;
356         BYTE nDCT;
357         BYTE nDNA;
358         BYTE nPanSwing;
359         BYTE nVolSwing;
360         BYTE nIFC;
361         BYTE nIFR;
362         WORD wMidiBank;
363         BYTE nMidiProgram;
364         BYTE nMidiChannel;
365         BYTE nMidiDrumKey;
366         signed char nPPS;
367         unsigned char nPPC;
368         CHAR name[32];
369         CHAR filename[12];
370 } INSTRUMENTHEADER;
371
372
373 // Channel Struct
374 typedef struct _MODCHANNEL
375 {
376         // First 32-bytes: Most used mixing information: don't change it
377         signed char * pCurrentSample;
378         DWORD nPos;
379         DWORD nPosLo;   // actually 16-bit
380         LONG nInc;              // 16.16
381         LONG nRightVol;
382         LONG nLeftVol;
383         LONG nRightRamp;
384         LONG nLeftRamp;
385         // 2nd cache line
386         DWORD nLength;
387         DWORD dwFlags;
388         DWORD nLoopStart;
389         DWORD nLoopEnd;
390         LONG nRampRightVol;
391         LONG nRampLeftVol;
392         LONG nFilter_Y1, nFilter_Y2, nFilter_Y3, nFilter_Y4;
393         LONG nFilter_A0, nFilter_B0, nFilter_B1;
394         LONG nROfs, nLOfs;
395         LONG nRampLength;
396         // Information not used in the mixer
397         signed char * pSample;
398         LONG nNewRightVol, nNewLeftVol;
399         LONG nRealVolume, nRealPan;
400         LONG nVolume, nPan, nFadeOutVol;
401         LONG nPeriod, nC4Speed, nPortamentoDest;
402         INSTRUMENTHEADER *pHeader;
403         MODINSTRUMENT *pInstrument;
404         DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition;
405         DWORD nMasterChn, nVUMeter;
406         LONG nGlobalVol, nInsVol;
407         LONG nFineTune, nTranspose;
408         LONG nPortamentoSlide, nAutoVibDepth;
409         UINT nAutoVibPos, nVibratoPos, nTremoloPos, nPanbrelloPos;
410         // 16-bit members
411         signed short nVolSwing, nPanSwing;
412         // 8-bit members
413         BYTE nNote, nNNA;
414         BYTE nNewNote, nNewIns, nCommand, nArpeggio;
415         BYTE nOldVolumeSlide, nOldFineVolUpDown;
416         BYTE nOldPortaUpDown, nOldFinePortaUpDown;
417         BYTE nOldPanSlide, nOldChnVolSlide;
418         BYTE nVibratoType, nVibratoSpeed, nVibratoDepth;
419         BYTE nTremoloType, nTremoloSpeed, nTremoloDepth;
420         BYTE nPanbrelloType, nPanbrelloSpeed, nPanbrelloDepth;
421         BYTE nOldCmdEx, nOldVolParam, nOldTempo;
422         BYTE nOldOffset, nOldHiOffset;
423         BYTE nCutOff, nResonance;
424         BYTE nRetrigCount, nRetrigParam;
425         BYTE nTremorCount, nTremorParam;
426         BYTE nPatternLoop, nPatternLoopCount;
427         BYTE nRowNote, nRowInstr;
428         BYTE nRowVolCmd, nRowVolume;
429         BYTE nRowCommand, nRowParam;
430         BYTE nLeftVU, nRightVU;
431         BYTE nActiveMacro, nPadding;
432 } MODCHANNEL;
433
434
435 typedef struct _MODCHANNELSETTINGS
436 {
437         UINT nPan;
438         UINT nVolume;
439         DWORD dwFlags;
440         UINT nMixPlugin;
441         char szName[MAX_CHANNELNAME];        // changed from CHAR
442 } MODCHANNELSETTINGS;
443
444
445 typedef struct _MODCOMMAND
446 {
447         BYTE note;
448         BYTE instr;
449         BYTE volcmd;
450         BYTE command;
451         BYTE vol;
452         BYTE param;
453 } MODCOMMAND, *LPMODCOMMAND;
454
455 ////////////////////////////////////////////////////////////////////
456 // Mix Plugins
457 #define MIXPLUG_MIXREADY                        0x01    // Set when cleared
458
459 class IMixPlugin
460 {
461 public:
462         virtual ~IMixPlugin();
463         virtual int AddRef() = 0;
464         virtual int Release() = 0;
465         virtual void SaveAllParameters() = 0;
466         virtual void RestoreAllParameters() = 0;
467         virtual void Process(float *pOutL, float *pOutR, unsigned long nSamples) = 0;
468         virtual void Init(unsigned long nFreq, int bReset) = 0;
469         virtual void MidiSend(DWORD dwMidiCode) = 0;
470         virtual void MidiCommand(UINT nMidiCh, UINT nMidiProg, UINT note, UINT vol) = 0;
471 };
472
473
474 #define MIXPLUG_INPUTF_MASTEREFFECT             0x01    // Apply to master mix
475 #define MIXPLUG_INPUTF_BYPASS                   0x02    // Bypass effect
476 #define MIXPLUG_INPUTF_WETMIX                   0x04    // Wet Mix (dry added)
477
478 typedef struct _SNDMIXPLUGINSTATE
479 {
480         DWORD dwFlags;                                  // MIXPLUG_XXXX
481         LONG nVolDecayL, nVolDecayR;    // Buffer click removal
482         int *pMixBuffer;                                // Stereo effect send buffer
483         float *pOutBufferL;                             // Temp storage for int -> float conversion
484         float *pOutBufferR;
485 } SNDMIXPLUGINSTATE, *PSNDMIXPLUGINSTATE;
486
487 typedef struct _SNDMIXPLUGININFO
488 {
489         DWORD dwPluginId1;
490         DWORD dwPluginId2;
491         DWORD dwInputRouting;   // MIXPLUG_INPUTF_XXXX
492         DWORD dwOutputRouting;  // 0=mix 0x80+=fx
493         DWORD dwReserved[4];    // Reserved for routing info
494         CHAR szName[32];
495         CHAR szLibraryName[64]; // original DLL name
496 } SNDMIXPLUGININFO, *PSNDMIXPLUGININFO; // Size should be 128
497
498 typedef struct _SNDMIXPLUGIN
499 {
500         IMixPlugin *pMixPlugin;
501         PSNDMIXPLUGINSTATE pMixState;
502         ULONG nPluginDataSize;
503         PVOID pPluginData;
504         SNDMIXPLUGININFO Info;
505 } SNDMIXPLUGIN, *PSNDMIXPLUGIN;
506
507 typedef BOOL (*PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN);
508
509 ////////////////////////////////////////////////////////////////////
510
511 enum {
512         MIDIOUT_START=0,
513         MIDIOUT_STOP,
514         MIDIOUT_TICK,
515         MIDIOUT_NOTEON,
516         MIDIOUT_NOTEOFF,
517         MIDIOUT_VOLUME,
518         MIDIOUT_PAN,
519         MIDIOUT_BANKSEL,
520         MIDIOUT_PROGRAM,
521 };
522
523
524 typedef struct MODMIDICFG
525 {
526         char szMidiGlb[9*32];      // changed from CHAR
527         char szMidiSFXExt[16*32];  // changed from CHAR
528         char szMidiZXXExt[128*32]; // changed from CHAR
529 } MODMIDICFG, *LPMODMIDICFG;
530
531 #define NOTE_MAX                        120 //Defines maximum notevalue as well as maximum number of notes.
532
533 typedef VOID (* LPSNDMIXHOOKPROC)(int *, unsigned long, unsigned long); // buffer, samples, channels
534
535
536
537 //==============
538 class CSoundFile
539 //==============
540 {
541 public: // Static Members
542         static UINT m_nXBassDepth, m_nXBassRange;
543         static UINT m_nReverbDepth, m_nReverbDelay, gnReverbType;
544         static UINT m_nProLogicDepth, m_nProLogicDelay;
545         static UINT m_nStereoSeparation;
546         static UINT m_nMaxMixChannels;
547         static LONG m_nStreamVolume;
548         static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels;
549         static UINT gnAGC, gnVolumeRampSamples, gnVUMeter, gnCPUUsage;
550         static LPSNDMIXHOOKPROC gpSndMixHook;
551         static PMIXPLUGINCREATEPROC gpMixPluginCreateProc;
552
553 public: // for Editing
554         MODCHANNEL Chn[MAX_CHANNELS];                                   // Channels
555         UINT ChnMix[MAX_CHANNELS];                                              // Channels to be mixed
556         MODINSTRUMENT Ins[MAX_SAMPLES];                                 // Instruments
557         INSTRUMENTHEADER *Headers[MAX_INSTRUMENTS];             // Instrument Headers
558         MODCHANNELSETTINGS ChnSettings[MAX_BASECHANNELS]; // Channels settings
559         MODCOMMAND *Patterns[MAX_PATTERNS];                             // Patterns
560         WORD PatternSize[MAX_PATTERNS];                                 // Patterns Lengths
561         BYTE Order[MAX_ORDERS];                                                 // Pattern Orders
562         MODMIDICFG m_MidiCfg;                                                   // Midi macro config table
563         SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS];              // Mix plugins
564         UINT m_nDefaultSpeed, m_nDefaultTempo, m_nDefaultGlobalVolume;
565         DWORD m_dwSongFlags;                                                    // Song flags SONG_XXXX
566         UINT m_nChannels, m_nMixChannels, m_nMixStat, m_nBufferCount;
567         UINT m_nType, m_nSamples, m_nInstruments;
568         UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay;
569         UINT m_nMusicSpeed, m_nMusicTempo;
570         UINT m_nNextRow, m_nRow;
571         UINT m_nPattern,m_nCurrentPattern,m_nNextPattern,m_nRestartPos;
572         UINT m_nMasterVolume, m_nGlobalVolume, m_nSongPreAmp;
573         UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
574         LONG m_nMinPeriod, m_nMaxPeriod, m_nRepeatCount, m_nInitialRepeatCount;
575         DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
576         UINT m_nMaxOrderPosition;
577         UINT m_nPatternNames;
578         LPSTR m_lpszSongComments, m_lpszPatternNames;
579         char m_szNames[MAX_INSTRUMENTS][32];    // changed from CHAR
580         CHAR CompressionTable[16];
581
582 public:
583         CSoundFile();
584         ~CSoundFile();
585
586 public:
587         BOOL Create(LPCBYTE lpStream, DWORD dwMemLength=0);
588         BOOL Destroy();
589         UINT GetType() const { return m_nType; }
590         UINT GetNumChannels() const;
591         UINT GetLogicalChannels() const { return m_nChannels; }
592         BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE);
593         UINT GetMasterVolume() const { return m_nMasterVolume; }
594         UINT GetNumPatterns() const;
595         UINT GetNumInstruments() const;
596         UINT GetNumSamples() const { return m_nSamples; }
597         UINT GetCurrentPos() const;
598         UINT GetCurrentPattern() const { return m_nPattern; }
599         UINT GetCurrentOrder() const { return m_nCurrentPattern; }
600         UINT GetSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
601         UINT GetRawSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
602         UINT GetMaxPosition() const;
603         void SetCurrentPos(UINT nPos);
604         void SetCurrentOrder(UINT nOrder);
605         void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); }
606         LPCSTR GetTitle() const { return m_szNames[0]; }
607         UINT GetSampleName(UINT nSample,LPSTR s=NULL) const;
608         UINT GetInstrumentName(UINT nInstr,LPSTR s=NULL) const;
609         UINT GetMusicSpeed() const { return m_nMusicSpeed; }
610         UINT GetMusicTempo() const { return m_nMusicTempo; }
611         DWORD GetLength(BOOL bAdjust, BOOL bTotal=FALSE);
612         DWORD GetSongTime() { return GetLength(FALSE, TRUE); }
613         void SetRepeatCount(int n) { m_nRepeatCount = n; m_nInitialRepeatCount = n; }
614         int GetRepeatCount() const { return m_nRepeatCount; }
615         BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; }
616         void LoopPattern(int nPat, int nRow=0);
617         void CheckCPUUsage(UINT nCPU);
618         BOOL SetPatternName(UINT nPat, LPCSTR lpszName);
619         BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const;
620         // Module Loaders
621         BOOL ReadXM(LPCBYTE lpStream, DWORD dwMemLength);
622         BOOL ReadS3M(LPCBYTE lpStream, DWORD dwMemLength);
623         BOOL ReadMod(LPCBYTE lpStream, DWORD dwMemLength);
624         BOOL ReadMed(LPCBYTE lpStream, DWORD dwMemLength);
625         BOOL ReadMTM(LPCBYTE lpStream, DWORD dwMemLength);
626         BOOL ReadSTM(LPCBYTE lpStream, DWORD dwMemLength);
627         BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
628         BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
629         BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
630         BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
631         BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
632         BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
633         BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
634         BOOL ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength);
635         BOOL ReadMDL(LPCBYTE lpStream, DWORD dwMemLength);
636         BOOL ReadOKT(LPCBYTE lpStream, DWORD dwMemLength);
637         BOOL ReadDMF(LPCBYTE lpStream, DWORD dwMemLength);
638         BOOL ReadPTM(LPCBYTE lpStream, DWORD dwMemLength);
639         BOOL ReadDBM(LPCBYTE lpStream, DWORD dwMemLength);
640         BOOL ReadAMF(LPCBYTE lpStream, DWORD dwMemLength);
641         BOOL ReadMT2(LPCBYTE lpStream, DWORD dwMemLength);
642         BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
643         BOOL ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength);
644         BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
645         BOOL ReadABC(LPCBYTE lpStream, DWORD dwMemLength);
646         BOOL TestABC(LPCBYTE lpStream, DWORD dwMemLength);
647         BOOL ReadMID(LPCBYTE lpStream, DWORD dwMemLength);
648         BOOL TestMID(LPCBYTE lpStream, DWORD dwMemLength);
649         BOOL ReadPAT(LPCBYTE lpStream, DWORD dwMemLength);
650         BOOL TestPAT(LPCBYTE lpStream, DWORD dwMemLength);
651         // Save Functions
652 #ifndef MODPLUG_NO_FILESAVE
653         UINT WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen=0);
654         BOOL SaveXM(LPCSTR lpszFileName, UINT nPacking=0);
655         BOOL SaveS3M(LPCSTR lpszFileName, UINT nPacking=0);
656         BOOL SaveMod(LPCSTR lpszFileName, UINT nPacking=0);
657         BOOL SaveIT(LPCSTR lpszFileName, UINT nPacking=0);
658 #endif // MODPLUG_NO_FILESAVE
659         // MOD Convert function
660         UINT GetBestSaveFormat() const;
661         UINT GetSaveFormats() const;
662         void ConvertModCommand(MODCOMMAND *) const;
663         void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
664         void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
665         WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
666
667 public:
668         // Real-time sound functions
669         VOID ResetChannels();
670
671         UINT Read(LPVOID lpBuffer, UINT cbBuffer);
672         UINT CreateStereoMix(int count);
673         BOOL FadeSong(UINT msec);
674         BOOL GlobalFadeSong(UINT msec);
675         UINT GetTotalTickCount() const { return m_nTotalCount; }
676         VOID ResetTotalTickCount() { m_nTotalCount = 0; }
677
678 public:
679         // Mixer Config
680         static BOOL InitPlayer(BOOL bReset=FALSE);
681         static BOOL SetMixConfig(UINT nStereoSeparation, UINT nMaxMixChannels);
682         static BOOL SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
683         static BOOL SetResamplingMode(UINT nMode); // SRCMODE_XXXX
684         static BOOL IsStereo() { return (gnChannels > 1) ? TRUE : FALSE; }
685         static DWORD GetSampleRate() { return gdwMixingFreq; }
686         static DWORD GetBitsPerSample() { return gnBitsPerSample; }
687         static DWORD InitSysInfo();
688         static DWORD GetSysInfo() { return gdwSysInfo; }
689         // AGC
690         static BOOL GetAGC() { return (gdwSoundSetup & SNDMIX_AGC) ? TRUE : FALSE; }
691         static void SetAGC(BOOL b);
692         static void ResetAGC();
693         static void ProcessAGC(int count);
694
695         //GCCFIX -- added these functions back in!
696         static BOOL SetWaveConfigEx(BOOL bSurround,BOOL bNoOverSampling,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ);
697         // DSP Effects
698         static void InitializeDSP(BOOL bReset);
699         static void ProcessStereoDSP(int count);
700         static void ProcessMonoDSP(int count);
701         // [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
702         static BOOL SetReverbParameters(UINT nDepth, UINT nDelay);
703         // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100]
704         static BOOL SetXBassParameters(UINT nDepth, UINT nRange);
705         // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
706         static BOOL SetSurroundParameters(UINT nDepth, UINT nDelay);
707 public:
708         BOOL ReadNote();
709         BOOL ProcessRow();
710         BOOL ProcessEffects();
711         UINT GetNNAChannel(UINT nChn) const;
712         void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
713         void NoteChange(UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE);
714         void InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
715         // Channel Effects
716         void PortamentoUp(MODCHANNEL *pChn, UINT param);
717         void PortamentoDown(MODCHANNEL *pChn, UINT param);
718         void FinePortamentoUp(MODCHANNEL *pChn, UINT param);
719         void FinePortamentoDown(MODCHANNEL *pChn, UINT param);
720         void ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param);
721         void ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param);
722         void TonePortamento(MODCHANNEL *pChn, UINT param);
723         void Vibrato(MODCHANNEL *pChn, UINT param);
724         void FineVibrato(MODCHANNEL *pChn, UINT param);
725         void VolumeSlide(MODCHANNEL *pChn, UINT param);
726         void PanningSlide(MODCHANNEL *pChn, UINT param);
727         void ChannelVolSlide(MODCHANNEL *pChn, UINT param);
728         void FineVolumeUp(MODCHANNEL *pChn, UINT param);
729         void FineVolumeDown(MODCHANNEL *pChn, UINT param);
730         void Tremolo(MODCHANNEL *pChn, UINT param);
731         void Panbrello(MODCHANNEL *pChn, UINT param);
732         void RetrigNote(UINT nChn, UINT param);
733         void NoteCut(UINT nChn, UINT nTick);
734         void KeyOff(UINT nChn);
735         int PatternLoop(MODCHANNEL *, UINT param);
736         void ExtendedMODCommands(UINT nChn, UINT param);
737         void ExtendedS3MCommands(UINT nChn, UINT param);
738         void ExtendedChannelEffect(MODCHANNEL *, UINT param);
739         void ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param=0);
740         void SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256) const;
741         // Low-Level effect processing
742         void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
743         // Global Effects
744         void SetTempo(UINT param);
745         void SetSpeed(UINT param);
746         void GlobalVolSlide(UINT param);
747         DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
748         BOOL IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const;
749         // Read/Write sample functions
750         signed char GetDeltaValue(signed char prev, UINT n) const { return (signed char)(prev + CompressionTable[n & 0x0F]); }
751         UINT PackSample(int &sample, int next);
752         BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
753         UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
754         BOOL DestroySample(UINT nSample);
755         BOOL DestroyInstrument(UINT nInstr);
756         BOOL IsSampleUsed(UINT nSample);
757         BOOL IsInstrumentUsed(UINT nInstr);
758         BOOL RemoveInstrumentSamples(UINT nInstr);
759         UINT DetectUnusedSamples(BOOL *);
760         BOOL RemoveSelectedSamples(BOOL *);
761         void AdjustSampleLoop(MODINSTRUMENT *pIns);
762         // I/O from another sound file
763         BOOL ReadInstrumentFromSong(UINT nInstr, CSoundFile *, UINT nSrcInstrument);
764         BOOL ReadSampleFromSong(UINT nSample, CSoundFile *, UINT nSrcSample);
765         // Period/Note functions
766         UINT GetNoteFromPeriod(UINT period) const;
767         UINT GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
768         UINT GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac=0) const;
769         // Misc functions
770         MODINSTRUMENT *GetSample(UINT n) { return Ins+n; }
771         void ResetMidiCfg();
772         UINT MapMidiInstrument(DWORD dwProgram, UINT nChannel, UINT nNote);
773         BOOL ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);
774         UINT SaveMixPlugins(FILE *f=NULL, BOOL bUpdate=TRUE);
775         UINT LoadMixPlugins(const void *pData, UINT nLen);
776 #ifndef NO_FILTER
777         DWORD CutOffToFrequency(UINT nCutOff, int flt_modifier=256) const; // [0-255] => [1-10KHz]
778 #endif
779
780         // Static helper functions
781 public:
782         static DWORD TransposeToFrequency(int transp, int ftune=0);
783         static int FrequencyToTranspose(DWORD freq);
784         static void FrequencyToTranspose(MODINSTRUMENT *psmp);
785
786         // System-Dependant functions
787 public:
788         static MODCOMMAND *AllocatePattern(UINT rows, UINT nchns);
789         static signed char* AllocateSample(UINT nbytes);
790         static void FreePattern(LPVOID pat);
791         static void FreeSample(LPVOID p);
792         static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc);
793 };
794
795
796 // inline DWORD BigEndian(DWORD x) { return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | ((x & 0xFF000000) >> 24); }
797 // inline WORD BigEndianW(WORD x) { return (WORD)(((x >> 8) & 0xFF) | ((x << 8) & 0xFF00)); }
798
799
800 //////////////////////////////////////////////////////////
801 // WAVE format information
802
803 #pragma pack(1)
804
805 // Standard IFF chunks IDs
806 #define IFFID_FORM              0x4d524f46
807 #define IFFID_RIFF              0x46464952
808 #define IFFID_WAVE              0x45564157
809 #define IFFID_LIST              0x5453494C
810 #define IFFID_INFO              0x4F464E49
811
812 // IFF Info fields
813 #define IFFID_ICOP              0x504F4349
814 #define IFFID_IART              0x54524149
815 #define IFFID_IPRD              0x44525049
816 #define IFFID_INAM              0x4D414E49
817 #define IFFID_ICMT              0x544D4349
818 #define IFFID_IENG              0x474E4549
819 #define IFFID_ISFT              0x54465349
820 #define IFFID_ISBJ              0x4A425349
821 #define IFFID_IGNR              0x524E4749
822 #define IFFID_ICRD              0x44524349
823
824 // Wave IFF chunks IDs
825 #define IFFID_wave              0x65766177
826 #define IFFID_fmt               0x20746D66
827 #define IFFID_wsmp              0x706D7377
828 #define IFFID_pcm               0x206d6370
829 #define IFFID_data              0x61746164
830 #define IFFID_smpl              0x6C706D73
831 #define IFFID_xtra              0x61727478
832
833 typedef struct WAVEFILEHEADER
834 {
835         DWORD id_RIFF;          // "RIFF"
836         DWORD filesize;         // file length-8
837         DWORD id_WAVE;
838 } WAVEFILEHEADER;
839
840
841 typedef struct WAVEFORMATHEADER
842 {
843         DWORD id_fmt;           // "fmt "
844         DWORD hdrlen;           // 16
845         WORD format;            // 1
846         WORD channels;          // 1:mono, 2:stereo
847         DWORD freqHz;           // sampling freq
848         DWORD bytessec;         // bytes/sec=freqHz*samplesize
849         WORD samplesize;        // sizeof(sample)
850         WORD bitspersample;     // bits per sample (8/16)
851 } WAVEFORMATHEADER;
852
853
854 typedef struct WAVEDATAHEADER
855 {
856         DWORD id_data;          // "data"
857         DWORD length;           // length of data
858 } WAVEDATAHEADER;
859
860
861 typedef struct WAVESMPLHEADER
862 {
863         // SMPL
864         DWORD smpl_id;          // "smpl"       -> 0x6C706D73
865         DWORD smpl_len;         // length of smpl: 3Ch  (54h with sustain loop)
866         DWORD dwManufacturer;
867         DWORD dwProduct;
868         DWORD dwSamplePeriod;   // 1000000000/freqHz
869         DWORD dwBaseNote;       // 3Ch = C-4 -> 60 + RelativeTone
870         DWORD dwPitchFraction;
871         DWORD dwSMPTEFormat;
872         DWORD dwSMPTEOffset;
873         DWORD dwSampleLoops;    // number of loops
874         DWORD cbSamplerData;
875 } WAVESMPLHEADER;
876
877
878 typedef struct SAMPLELOOPSTRUCT
879 {
880         DWORD dwIdentifier;
881         DWORD dwLoopType;               // 0=normal, 1=bidi
882         DWORD dwLoopStart;
883         DWORD dwLoopEnd;                // Byte offset ?
884         DWORD dwFraction;
885         DWORD dwPlayCount;              // Loop Count, 0=infinite
886 } SAMPLELOOPSTRUCT;
887
888
889 typedef struct WAVESAMPLERINFO
890 {
891         WAVESMPLHEADER wsiHdr;
892         SAMPLELOOPSTRUCT wsiLoops[2];
893 } WAVESAMPLERINFO;
894
895
896 typedef struct WAVELISTHEADER
897 {
898         DWORD list_id;  // "LIST" -> 0x5453494C
899         DWORD list_len;
900         DWORD info;             // "INFO"
901 } WAVELISTHEADER;
902
903
904 typedef struct WAVEEXTRAHEADER
905 {
906         DWORD xtra_id;  // "xtra"       -> 0x61727478
907         DWORD xtra_len;
908         DWORD dwFlags;
909         WORD  wPan;
910         WORD  wVolume;
911         WORD  wGlobalVol;
912         WORD  wReserved;
913         BYTE nVibType;
914         BYTE nVibSweep;
915         BYTE nVibDepth;
916         BYTE nVibRate;
917 } WAVEEXTRAHEADER;
918
919 #pragma pack()
920
921 ///////////////////////////////////////////////////////////
922 // Low-level Mixing functions
923
924 #define MIXBUFFERSIZE           512
925 #define MIXING_ATTENUATION      4
926 #define MIXING_CLIPMIN          (-0x08000000)
927 #define MIXING_CLIPMAX          (0x07FFFFFF)
928 #define VOLUMERAMPPRECISION     12
929 #define FADESONGDELAY           100
930 #define EQ_BUFFERSIZE           (MIXBUFFERSIZE)
931 #define AGC_PRECISION           9
932 #define AGC_UNITY                       (1 << AGC_PRECISION)
933
934 // Calling conventions
935 #ifdef MSC_VER
936 #define MPPASMCALL      __cdecl
937 #define MPPFASTCALL     __fastcall
938 #else
939 #define MPPASMCALL
940 #define MPPFASTCALL
941 #endif
942
943 #define MOD2XMFineTune(k)       ((int)( (signed char)((k)<<4) ))
944 #define XM2MODFineTune(k)       ((int)( (k>>4)&0x0f ))
945
946 int _muldiv(long a, long b, long c);
947 int _muldivr(long a, long b, long c);
948
949
950 // Byte swapping functions from the GNU C Library and libsdl
951
952 /* Swap bytes in 16 bit value.  */
953 #ifdef __GNUC__
954 # define bswap_16(x) \
955     (__extension__                                                            \
956      ({ unsigned short int __bsx = (x);                                       \
957         ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
958 #else
959 static __inline unsigned short int
960 bswap_16 (unsigned short int __bsx)
961 {
962   return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
963 }
964 #endif
965
966 /* Swap bytes in 32 bit value.  */
967 #ifdef __GNUC__
968 # define bswap_32(x) \
969     (__extension__                                                            \
970      ({ unsigned int __bsx = (x);                                             \
971         ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >>  8) |    \
972          (((__bsx) & 0x0000ff00) <<  8) | (((__bsx) & 0x000000ff) << 24)); }))
973 #else
974 static __inline unsigned int
975 bswap_32 (unsigned int __bsx)
976 {
977   return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >>  8) |
978           (((__bsx) & 0x0000ff00) <<  8) | (((__bsx) & 0x000000ff) << 24));
979 }
980 #endif
981
982 #if (defined ARM) && (defined _WIN32_WCE)
983 static __inline unsigned short int
984 ARM_get16(const void *data)
985 {
986         unsigned short int s;
987         memcpy(&s,data,sizeof(s));
988         return s;
989 }
990
991 static __inline unsigned int
992 ARM_get32(const void *data)
993 {
994         unsigned int s;
995         memcpy(&s,data,sizeof(s));
996         return s;
997 }
998
999 #define bswapLE16(X) ARM_get16(&X)
1000 #define bswapLE32(X) ARM_get32(&X)
1001 #define bswapBE16(X) bswap_16(ARM_get16(&X))
1002 #define bswapBE32(X) bswap_32(ARM_get32(&X))
1003
1004 // From libsdl
1005 #elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
1006 #define bswapLE16(X) bswap_16(X)
1007 #define bswapLE32(X) bswap_32(X)
1008 #define bswapBE16(X) (X)
1009 #define bswapBE32(X) (X)
1010 #else
1011 #define bswapLE16(X) (X)
1012 #define bswapLE32(X) (X)
1013 #define bswapBE16(X) bswap_16(X)
1014 #define bswapBE32(X) bswap_32(X)
1015 #endif
1016
1017 #endif