/*
 * Copyright (C) the Wine project
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __WINE_WINDOWS_H
#define __WINE_WINDOWS_H

#ifdef __WINESRC__
#error Wine should not include windows.h internally
#endif

#if defined(_MSC_VER) && (_MSC_VER >= 800) && !defined(__cplusplus)
/* TYPE_ALIGNMENT generates this - move it outside the warning push/pop scope. */
# pragma warning(disable:4116)
#endif

#if defined(RC_INVOKED) && !defined(NOWINRES)
#include "winresrc.h"
#else /* RC_INVOKED && !NOWINRES */

/* All the basic includes */
#include "excpt.h"
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "winnls.h"
#include "wincon.h"
#include "winver.h"
#include "winreg.h"
#include "winnetwk.h"

/* Not so essential ones */
#ifndef WIN32_LEAN_AND_MEAN

#include "cderr.h"
#include "dde.h"
#include "ddeml.h"
#include "dlgs.h"
#include "lzexpand.h"
#include "mmsystem.h"
#include "nb30.h"
#include "rpc.h"
#include "shellapi.h"
/* #include "winperf.h" */

#ifndef WINE_NOWINSOCK
#include "winsock2.h"
#endif /* WINE_NOWINSOCK */

#ifndef NOCRYPT
#include "wincrypt.h"
/* #include "winefs.h" */
/* #include "winscard.h" */
#endif /* !NOCRYPT */

#ifndef NOGDI
#include "winspool.h"
#ifdef INC_OLE1
/* #include "ole.h" */
#else
#include "ole2.h"
#endif
#include "commdlg.h"
#endif /* !NOGDI */

#endif /* !WIN32_LEAN_AND_MEAN */

/* #include "stralign.h" */

#ifdef INC_OLE2
#include "ole2.h"
#endif /* INC_OLE2 */

#ifndef NOSERVICE
#include "winsvc.h"
#endif /* !NOSERVICE */

#ifndef NOMCX
#include "mcx.h"
#endif /* !NOMCX */

#ifndef NOIMM
#include "imm.h"
#endif /* !NOIMM */

#endif  /* RC_INVOKED && !NOWINRES */
#endif  /* __WINE_WINDOWS_H */
