Cygwin support, using SDL.
[btb/d2x.git] / unused / win95 / midiseq.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14
15
16 #ifndef _MIDISEQ_H
17 #define _MIDISEQ_H
18
19 #include "global.h"
20 #include "midifile.h"   
21
22 #define  VERSION_MINOR              0x00
23 #define  VERSION_MAJOR              0x04
24 #define  SEQ_VERSION                ((DWORD)(WORD)((BYTE)VERSION_MINOR | (((WORD)(BYTE)VERSION_MAJOR) << 8)))
25
26 #define SEQ_F_EOF           0x00000001L
27 #define SEQ_F_COLONIZED     0x00000002L
28 #define SEQ_F_WAITING       0x00000004L   
29                                           
30 #define SEQ_S_NOFILE        0
31 #define SEQ_S_OPENED        1
32 #define SEQ_S_PREROLLING    2
33 #define SEQ_S_PREROLLED     3
34 #define SEQ_S_PLAYING       4
35 #define SEQ_S_PAUSED        5
36 #define SEQ_S_STOPPING      6
37 #define SEQ_S_RESET         7
38
39
40 typedef struct tag_preroll
41 {
42     TICKS       tkBase;
43     TICKS       tkEnd;
44 }   PREROLL,
45     FAR *LPPREROLL;
46
47 typedef struct tag_seq NEAR* PSEQ;
48 typedef struct tag_seq
49 {
50     DWORD       cBuffer;            /* Number of streaming buffers to alloc         */
51     DWORD       cbBuffer;           /* Size of each streaming buffer                */
52     LPSTR       pstrFile;           /* Pointer to filename to open                  */
53     UINT        uDeviceID;          /* Requested MIDI device ID for MMSYSTEM        */
54     UINT        uMCIDeviceID;       /* Our MCI device ID given to us                */
55     UINT        uMCITimeFormat;     /* Current time format                          */
56     UINT        uMCITimeDiv;        /* MCI_SEQ_DIV_xxx for current file             */
57         HWND            hWnd;                           /* Where to post MMSG_DONE when done playing    */
58
59     UINT        uState;             /* Sequencer state (SEQ_S_xxx)                  */
60     TICKS       tkLength;           /* Length of longest track                      */
61     DWORD       cTrk;               /* Number of tracks                             */
62     MMRESULT    mmrcLastErr;        /* Error return from last sequencer operation   */
63
64     PSEQ        pNext;              /* Link to next PSEQ                            */
65     HSMF        hSmf;               /* Handle to open file                          */
66     HMIDIOUT    hmidi;              /* Handle to open MIDI device                   */
67     DWORD       dwTimeDivision;     /* File time division                           */
68
69     LPBYTE      lpbAlloc;           /* Streaming buffers -- initial allocation      */ 
70     LPMIDIHDR   lpmhFree;           /* Streaming buffers -- free list               */
71     LPMIDIHDR   lpmhPreroll;        /* Streaming buffers -- preroll buffer          */
72     DWORD       cbPreroll;          /* Streaming buffers -- size of lpmhPreroll     */
73     UINT        uBuffersInMMSYSTEM; /* Streaming buffers -- in use                  */
74     
75     TICKS       tkBase;             /* Where playback started from in stream        */
76     TICKS       tkEnd;              /* Where playback should end                    */
77     
78     DWORD       fdwSeq;             /* Various sequencer flags                      */
79
80 }   SEQ,
81     NEAR *PSEQ;
82
83 /* sequence.c
84 */
85
86 MMRESULT FNLOCAL seqAllocBuffers(    
87     PSEQ                pseq);
88
89 VOID FNLOCAL seqFreeBuffers(         
90     PSEQ                pseq);
91
92 MMRESULT FNLOCAL seqOpenFile(        
93     PSEQ                pseq);
94
95 MMRESULT FNLOCAL seqCloseFile(       
96     PSEQ                pseq);
97
98 MMRESULT FNLOCAL seqPreroll(         
99     PSEQ                pseq,
100     LPPREROLL           lppreroll);
101
102 MMRESULT FNLOCAL seqStart(           
103     PSEQ                pseq);
104
105 MMRESULT FNLOCAL seqPause(           
106     PSEQ                pseq);
107
108 MMRESULT FNLOCAL seqRestart(         
109     PSEQ                pseq);
110
111 MMRESULT FNLOCAL seqStop(            
112     PSEQ                pseq);
113
114 MMRESULT FNLOCAL seqTime(            
115     PSEQ                pseq,
116     PTICKS              pTicks);
117
118 TICKS FNLOCAL seqMillisecsToTicks(   
119     PSEQ                pseq,
120     DWORD               msOffset);
121
122 DWORD FNLOCAL seqTicksToMillisecs(   
123     PSEQ                pseq,
124     TICKS               tkOffset);
125
126
127 #endif