/*
 * Top level resource file for shell stuff
 *
 * Copyright 1998 Juergen Schmied
 *
 * 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 "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "wingdi.h"
#include "shlobj.h"
#include "shresdef.h"

#include "version.rc"

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

shv_accel ACCELERATORS
BEGIN
	VK_F5, FCIDM_SHVIEW_REFRESH, VIRTKEY
END

/* @makedep: document.ico */
IDI_SHELL_DOCUMENT ICON document.ico

/* @makedep: folder.ico */
IDI_SHELL_FOLDER ICON folder.ico

/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN ICON folder_open.ico

/* FIXME: Following three resources are not yet added */
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN_SMALL ICON folder_open.ico
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN_LARGE ICON folder_open.ico
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_SMALL_XP ICON folder_open.ico

/* @makedep: floppy.ico */
IDI_SHELL_FLOPPY ICON floppy.ico

/* @makedep: drive.ico */
IDI_SHELL_DRIVE ICON drive.ico

/* @makedep: netdrive.ico */
IDI_SHELL_NETDRIVE ICON netdrive.ico

/* @makedep: netdrive2.ico */
IDI_SHELL_NETDRIVE2 ICON netdrive2.ico

/* @makedep: cdrom.ico */
IDI_SHELL_CDROM ICON cdrom.ico

/* @makedep: ramdisk.ico */
IDI_SHELL_RAMDISK ICON ramdisk.ico

/* @makedep: mycomputer.ico */
IDI_SHELL_MY_COMPUTER ICON mycomputer.ico

/* @makedep: printer.ico */
IDI_SHELL_PRINTER ICON printer.ico

/* @makedep: shortcut.ico */
IDI_SHELL_SHORTCUT ICON shortcut.ico

/* @makedep: desktop.ico */
IDI_SHELL_DESKTOP ICON desktop.ico

/* @makedep: trash_file.ico */
IDI_SHELL_FULL_RECYCLE_BIN ICON trash_file.ico

/* @makedep: trash_file.ico */
IDI_SHELL_TRASH_FILE ICON trash_file.ico

/* @makedep: delete.ico */
IDI_SHELL_CONFIRM_DELETE ICON delete.ico

/* @makedep: mydocs.ico */
IDI_SHELL_MY_DOCUMENTS ICON mydocs.ico

/* @makedep: searching.avi */
IDR_AVI_SEARCHING AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_SEARCH AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILEMOVE AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILECOPY AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FINDCOMPUTER AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILENUKE AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILEDELETE AVI searching.avi


/*
 * Everything specific to any language goes
 * in one of the specific files.
 * Note that you can and may override resources
 * which also have a neutral version. This is to
 * get localized bitmaps for example.
 */
#include "shell32_Bg.rc"
#include "shell32_Ca.rc"
#include "shell32_Cn.rc"
#include "shell32_Cs.rc"
#include "shell32_Da.rc"
#include "shell32_De.rc"
#include "shell32_En.rc"
#include "shell32_Eo.rc"
#include "shell32_Es.rc"
#include "shell32_Fi.rc"
#include "shell32_Fr.rc"
#include "shell32_Hu.rc"
#include "shell32_It.rc"
#include "shell32_Ja.rc"
#include "shell32_Ko.rc"
#include "shell32_Nl.rc"
#include "shell32_No.rc"
#include "shell32_Pl.rc"
#include "shell32_Pt.rc"
#include "shell32_Ru.rc"
#include "shell32_Si.rc"
#include "shell32_Sk.rc"
#include "shell32_Sv.rc"
#include "shell32_Tr.rc"
#include "shell32_Uk.rc"
#include "shell32_Wa.rc"
#include "shell32_Zh.rc"
