/* Structure definitions for Win32 -- used only internally */
#ifndef __WINE__STRUCT32_H
#define __WINE__STRUCT32_H
#include "handle32.h"

void STRUCT32_RECT32to16(const RECT32*,RECT16*);
void STRUCT32_RECT16to32(const RECT16*,RECT32*);
void STRUCT32_POINT32to16(const POINT32*,POINT16*);
void STRUCT32_POINT16to32(const POINT16*,POINT32*);
void STRUCT32_SIZE16to32(const SIZE16*, SIZE32*);

extern void STRUCT32_MINMAXINFO32to16( const MINMAXINFO32*, MINMAXINFO16* );
extern void STRUCT32_MINMAXINFO16to32( const MINMAXINFO16*, MINMAXINFO32* );
extern void STRUCT32_WINDOWPOS32to16( const WINDOWPOS32*, WINDOWPOS16* );
extern void STRUCT32_WINDOWPOS16to32( const WINDOWPOS16*, WINDOWPOS32* );
extern void STRUCT32_NCCALCSIZE32to16Flat( const NCCALCSIZE_PARAMS32 *from,
                                           NCCALCSIZE_PARAMS16 *to,
                                           int validRects );
extern void STRUCT32_NCCALCSIZE16to32Flat( const NCCALCSIZE_PARAMS16* from,
                                           NCCALCSIZE_PARAMS32* to,
                                           int validRects );

void STRUCT32_MSG16to32(const MSG16 *msg16,MSG32 *msg32);
void STRUCT32_MSG32to16(const MSG32 *msg32,MSG16 *msg16);

void STRUCT32_CREATESTRUCT32Ato16(const CREATESTRUCT32A*,CREATESTRUCT16*);
void STRUCT32_CREATESTRUCT16to32A(const CREATESTRUCT16*,CREATESTRUCT32A*);

#pragma pack(1)

typedef struct {
	BYTE   bWidth;
	BYTE   bHeight;
	BYTE   bColorCount;
	BYTE   bReserved;
	WORD   wPlanes;
	WORD   wBitCount;
	DWORD  dwBytesInRes;
	WORD   wResId WINE_PACKED;
	/*WORD   padding;	Spec is wrong, no padding here*/
} ICONDIRENTRY32;

typedef struct {
	WORD   wWidth;
	WORD   wHeight;
	WORD   wPlanes;
	WORD   wBitCount;
	DWORD  dwBytesInRes;
	WORD   wResId WINE_PACKED;
	/*WORD   padding;*/
} CURSORDIRENTRY32;

typedef union{
	ICONDIRENTRY32	icon;
	CURSORDIRENTRY32	cursor;
} CURSORICONDIRENTRY32;

typedef struct {
	WORD    idReserved;
	WORD    idType;
	WORD    idCount;
	/*WORD	padding;*/
	CURSORICONDIRENTRY32	idEntries[1];
} CURSORICONDIR32;


#pragma pack(4)

#endif  /* __WINE_STRUCT32_H */
