/*
 * Message queues definitions
 *
 * Copyright 1993 Alexandre Julliard
 */

#ifndef MESSAGE_H
#define MESSAGE_H

#include "windows.h"

  /* Message as stored in the queue (contains the extraInfo field) */
typedef struct tagQMSG
{
    DWORD   extraInfo;  /* Only in 3.1 */
    MSG     msg;
} QMSG;


typedef struct tagMESSAGEQUEUE
{
  WORD      next;
  WORD      hTask;                  /* hTask owning the queue                */
  WORD      msgSize;                /* Size of messages in the queue         */
  WORD      msgCount;               /* Number of waiting messages            */
  WORD      nextMessage;            /* Next message to be retrieved          */
  WORD      nextFreeMessage;        /* Next available slot in the queue      */
  WORD      queueSize;              /* Size of the queue                     */
  DWORD     GetMessageTimeVal;      /* Value returned by GetMessageTime      */
  DWORD     GetMessagePosVal;       /* Value returned by GetMessagePos       */
  DWORD     GetMessageExtraInfoVal; /* Value returned by GetMessageExtraInfo */
  DWORD     lParam;                 /* Next four values set by SendMessage   */
  WORD      wParam;
  WORD      msg;
  WORD      hWnd;
  WORD      wPostQMsg;              /* PostQuitMessage flag                  */
  WORD      wExitCode;              /* PostQuitMessage exit code             */
  WORD      InSendMessageHandle;    /* Handle of task that sent a message    */
  WORD      wPaintCount;            /* Number of WM_PAINT needed             */
  WORD      wTimerCount;            /* Number of timers for this application */
  WORD      tempStatus;             /* State reset by GetQueueStatus         */
  WORD      status;                 /* Queue state                           */
  QMSG      messages[1];            /* Queue messages                        */
} MESSAGEQUEUE;


extern void MSG_IncPaintCount( HANDLE hQueue );
extern void MSG_DecPaintCount( HANDLE hQueue );
extern void MSG_IncTimerCount( HANDLE hQueue );
extern void MSG_DecTimerCount( HANDLE hQueue );
extern BOOL MSG_CreateSysMsgQueue( int size );
extern void hardware_event(HWND hwnd, WORD message, WORD wParam, LONG lParam,
			   WORD xPos, WORD yPos, DWORD time, DWORD extraInfo);
extern BOOL MSG_GetHardwareMessage( LPMSG msg );

#endif  /* MESSAGE_H */
