/*
 * Copyright 2000 Martin Fuchs
 *
 * 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 <windef.h>
#include <winuser.h>

#include "resource.h"

/* define language neutral resources */

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

IDA_WINEFILE ACCELERATORS DISCARDABLE
{
	VK_F1, ID_HELP, VIRTKEY, NOINVERT
	VK_F5, ID_REFRESH, VIRTKEY, NOINVERT
	VK_F7, ID_FILE_MOVE, VIRTKEY, NOINVERT
	VK_F8, ID_FILE_COPY, VIRTKEY, NOINVERT
	VK_DELETE, ID_FILE_DELETE, VIRTKEY, NOINVERT
	VK_RETURN, ID_ACTIVATE, VIRTKEY, NOINVERT
	VK_RETURN, ID_EDIT_PROPERTIES, VIRTKEY, ALT, NOINVERT
#ifndef _NO_EXTENSIONS
	"X", ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
	"S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL, NOINVERT
	VK_ADD, ID_PREFERRED_SIZES, VIRTKEY, CONTROL, NOINVERT
#endif
}

/* @makedep: winefile.ico */
IDI_WINEFILE ICON DISCARDABLE winefile.ico

/* @makedep: toolbar.bmp */
IDB_TOOLBAR BITMAP DISCARDABLE toolbar.bmp

/* @makedep: drivebar.bmp */
IDB_DRIVEBAR BITMAP DISCARDABLE drivebar.bmp

/* @makedep: images.bmp */
IDB_IMAGES BITMAP DISCARDABLE images.bmp

/* include localised resources */

#include "Cs.rc"
#include "Da.rc"
#include "De.rc"
#include "En.rc"
#include "Es.rc"
#include "Fr.rc"
#include "Hu.rc"
#include "It.rc"
#include "Ko.rc"
#include "Nl.rc"
#include "No.rc"
#include "Pl.rc"
#include "Pt.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Sv.rc"
#include "Tr.rc"
#include "Zh.rc"
