Release 960616
[wine/multimedia.git] / include / queue.h
blobcffd7e3bf8eb1793d38110b0c064392c7f24508c
1 /*
2 * Message queues definitions
4 * Copyright 1993 Alexandre Julliard
5 */
7 #ifndef __WINE_QUEUE_H
8 #define __WINE_QUEUE_H
10 #include "windows.h"
12 #ifndef WINELIB
13 #pragma pack(1)
14 #endif
16 /* Message as stored in the queue (contains the extraInfo field) */
17 typedef struct tagQMSG
19 DWORD extraInfo; /* Only in 3.1 */
20 MSG16 msg;
21 } QMSG;
24 typedef struct tagMESSAGEQUEUE
26 HQUEUE next; /* 00 Next queue */
27 HTASK hTask; /* 02 hTask owning the queue */
28 WORD msgSize; /* 04 Size of messages in the queue */
29 WORD msgCount; /* 06 Number of waiting messages */
30 WORD nextMessage; /* 08 Next message to be retrieved */
31 WORD nextFreeMessage; /* 0a Next available slot in the queue */
32 WORD queueSize; /* 0c Size of the queue */
33 DWORD GetMessageTimeVal WINE_PACKED; /* 0e Value for GetMessageTime */
34 DWORD GetMessagePosVal WINE_PACKED; /* 12 Value for GetMessagePos */
35 HQUEUE self; /* 16 Handle to self (was: reserved) */
36 DWORD GetMessageExtraInfoVal; /* 18 Value for GetMessageExtraInfo */
37 WORD reserved2; /* 1c Unknown */
38 LPARAM lParam WINE_PACKED; /* 1e Next 4 values set by SendMessage */
39 WPARAM wParam; /* 22 */
40 UINT msg; /* 24 */
41 HWND hWnd; /* 26 */
42 DWORD SendMessageReturn; /* 28 Return value for SendMessage */
43 WORD wPostQMsg; /* 2c PostQuitMessage flag */
44 WORD wExitCode; /* 2e PostQuitMessage exit code */
45 WORD flags; /* 30 Queue flags */
46 WORD reserved3[2]; /* 32 Unknown */
47 WORD wWinVersion; /* 36 Expected Windows version */
48 HQUEUE InSendMessageHandle; /* 38 Queue of task that sent a message */
49 HTASK hSendingTask; /* 3a Handle of task that sent a message */
50 HTASK hPrevSendingTask; /* 3c Handle of previous sender */
51 WORD wPaintCount; /* 3e Number of WM_PAINT needed */
52 WORD wTimerCount; /* 40 Number of timers for this task */
53 WORD changeBits; /* 42 Changed wake-up bits */
54 WORD wakeBits; /* 44 Queue wake-up bits */
55 WORD wakeMask; /* 46 Queue wake-up mask */
56 WORD SendMsgReturnPtrs[3]; /* 48 Near ptr to return values (?) */
57 HANDLE hCurHook; /* 4e Current hook */
58 HANDLE hooks[WH_NB_HOOKS]; /* 50 Task hooks list */
59 WORD reserved4[3]; /* 68 Unknown */
60 QMSG messages[1]; /* 6e Queue messages */
61 } MESSAGEQUEUE;
63 #ifndef WINELIB
64 #pragma pack(4)
65 #endif
67 /* Extra (undocumented) queue wake bits; not sure about the values */
68 #define QS_SMRESULT 0x0100 /* Queue has a SendMessage() result */
69 #define QS_SMPARAMSFREE 0x0200 /* SendMessage() parameters are available */
71 /* Queue flags */
72 #define QUEUE_FLAG_REPLIED 0x0001 /* Replied to a SendMessage() */
74 extern void QUEUE_DumpQueue( HQUEUE hQueue );
75 extern void QUEUE_WalkQueues(void);
76 extern MESSAGEQUEUE *QUEUE_GetSysQueue(void);
77 extern void QUEUE_SetWakeBit( MESSAGEQUEUE *queue, WORD bit );
78 extern void QUEUE_ClearWakeBit( MESSAGEQUEUE *queue, WORD bit );
79 extern void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue );
80 extern void QUEUE_WaitBits( WORD bits );
81 extern void QUEUE_IncPaintCount( HQUEUE hQueue );
82 extern void QUEUE_DecPaintCount( HQUEUE hQueue );
83 extern void QUEUE_IncTimerCount( HQUEUE hQueue );
84 extern void QUEUE_DecTimerCount( HQUEUE hQueue );
85 extern BOOL QUEUE_CreateSysMsgQueue( int size );
86 extern BOOL QUEUE_DeleteMsgQueue( HQUEUE hQueue );
87 extern HTASK QUEUE_GetQueueTask( HQUEUE hQueue );
88 extern BOOL QUEUE_AddMsg( HQUEUE hQueue, MSG16 * msg, DWORD extraInfo );
89 extern int QUEUE_FindMsg( MESSAGEQUEUE * msgQueue, HWND hwnd,
90 int first, int last );
91 extern void QUEUE_RemoveMsg( MESSAGEQUEUE * msgQueue, int pos );
92 extern void hardware_event( WORD message, WORD wParam, LONG lParam,
93 int xPos, int yPos, DWORD time, DWORD extraInfo );
95 #endif /* __WINE_QUEUE_H */