/*
 * 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

/*--------------------- END FIXME ------------------------*/

/*
 * Everything that does not depend on language,
 * like textless bitmaps etc, go into the
 * neutral language. This will prevent them from
 * being duplicated for each language.
 */
#include "shell32_xx.rc"

/*
 * 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"
