/*
 * WineCfg resources
 *
 * Copyright 2002 Jaco Greeff
 * Copyright 2003 Dimitrie O. Paun
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 */

#include "config.h"   /* Needed for the PACKAGE_STRING definition */
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winnls.h"
#include "winuser.h"
#include "commctrl.h"
#include "resource.h"

#include "Bg.rc"
#include "Cs.rc"
#include "De.rc"
#include "En.rc"
#include "Es.rc"
#include "Fi.rc"
#include "Fr.rc"
#include "Hu.rc"
/* #include "It.rc" */
#include "Ja.rc"
#include "Ko.rc"
#include "Nl.rc"
#include "No.rc"
#include "Pl.rc"
/* #include "Pt.rc" */
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Sv.rc"
#include "Tr.rc"
#include "Zh.rc"

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: idb_wine.bmp */
IDB_WINE BITMAP idb_wine.bmp

/* @makedep: idb_checkbox.bmp */
IDB_CHECKBOX BITMAP idb_checkbox.bmp

/* @makedep: idw_testsound.wav */
IDW_TESTSOUND WAVE idw_testsound.wav
