/*
 * USER resources
 *
 * Copyright 2001 Alexandre Julliard
 *
 * 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 "resources.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

SYSMENU MENU
{
    MENUITEM "#msgctxt#window#&Restore", 61728
    MENUITEM "&Move", 61456
    MENUITEM "&Size", 61440
    MENUITEM "Mi&nimize", 61472
    MENUITEM "Ma&ximize", 61488
    MENUITEM SEPARATOR
    MENUITEM "&Close\tAlt-F4", 61536
    MENUITEM SEPARATOR
    MENUITEM "&About Wine", 61761
}

SYSMENUMDI MENU
{
    MENUITEM "#msgctxt#window#&Restore", 61728
    MENUITEM "&Move", 61456
    MENUITEM "&Size", 61440
    MENUITEM "Mi&nimize", 61472
    MENUITEM "Ma&ximize", 61488
    MENUITEM SEPARATOR
    MENUITEM "&Close\tCtrl-F4", 61536
    MENUITEM SEPARATOR
    MENUITEM "Nex&t\tCtrl-F6", 61504
}

EDITMENU MENU
{
    POPUP ""
    BEGIN
        MENUITEM "&Undo", EM_UNDO
        MENUITEM SEPARATOR
        MENUITEM "Cu&t", WM_CUT
        MENUITEM "&Copy", WM_COPY
        MENUITEM "&Paste", WM_PASTE
        MENUITEM "&Delete", WM_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "Select &All", EM_SETSEL
    END
}

STRINGTABLE
{
    IDS_ERROR "Error"
    IDS_MDI_MOREWINDOWS "&More Windows..."
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/****************************************************************/
/* Bitmaps */

/* @makedep: resources/obm_trtype.bmp */
OBM_TRTYPE BITMAP resources/obm_trtype.bmp

/* @makedep: resources/obm_lfarrowi.bmp */
OBM_LFARROWI BITMAP resources/obm_lfarrowi.bmp

/* @makedep: resources/obm_rgarrowi.bmp */
OBM_RGARROWI BITMAP resources/obm_rgarrowi.bmp

/* @makedep: resources/obm_dnarrowi.bmp */
OBM_DNARROWI BITMAP resources/obm_dnarrowi.bmp

/* @makedep: resources/obm_uparrowi.bmp */
OBM_UPARROWI BITMAP resources/obm_uparrowi.bmp

/* @makedep: resources/obm_combo.bmp */
OBM_COMBO BITMAP resources/obm_combo.bmp

/* @makedep: resources/obm_mnarrow.bmp */
OBM_MNARROW BITMAP resources/obm_mnarrow.bmp

/* @makedep: resources/obm_lfarrowd.bmp */
OBM_LFARROWD BITMAP resources/obm_lfarrowd.bmp

/* @makedep: resources/obm_rgarrowd.bmp */
OBM_RGARROWD BITMAP resources/obm_rgarrowd.bmp

/* @makedep: resources/obm_dnarrowd.bmp */
OBM_DNARROWD BITMAP resources/obm_dnarrowd.bmp

/* @makedep: resources/obm_uparrowd.bmp */
OBM_UPARROWD BITMAP resources/obm_uparrowd.bmp

/* @makedep: resources/obm_restored.bmp */
OBM_RESTORED BITMAP resources/obm_restored.bmp

/* @makedep: resources/obm_zoomd.bmp */
OBM_ZOOMD BITMAP resources/obm_zoomd.bmp

/* @makedep: resources/obm_reduced.bmp */
OBM_REDUCED BITMAP resources/obm_reduced.bmp

/* @makedep: resources/obm_restore.bmp */
OBM_RESTORE BITMAP resources/obm_restore.bmp

/* @makedep: resources/obm_zoom.bmp */
OBM_ZOOM BITMAP resources/obm_zoom.bmp

/* @makedep: resources/obm_reduce.bmp */
OBM_REDUCE BITMAP resources/obm_reduce.bmp

/* @makedep: resources/obm_lfarrow.bmp */
OBM_LFARROW BITMAP resources/obm_lfarrow.bmp

/* @makedep: resources/obm_rgarrow.bmp */
OBM_RGARROW BITMAP resources/obm_rgarrow.bmp

/* @makedep: resources/obm_dnarrow.bmp */
OBM_DNARROW BITMAP resources/obm_dnarrow.bmp

/* @makedep: resources/obm_uparrow.bmp */
OBM_UPARROW BITMAP resources/obm_uparrow.bmp

/* @makedep: resources/obm_close.bmp */
OBM_CLOSE BITMAP resources/obm_close.bmp

/* @makedep: resources/obm_old_restore.bmp */
OBM_OLD_RESTORE BITMAP resources/obm_old_restore.bmp

/* @makedep: resources/obm_old_zoom.bmp */
OBM_OLD_ZOOM BITMAP resources/obm_old_zoom.bmp

/* @makedep: resources/obm_old_reduce.bmp */
OBM_OLD_REDUCE BITMAP resources/obm_old_reduce.bmp

/* @makedep: resources/obm_btncorners.bmp */
OBM_BTNCORNERS BITMAP resources/obm_btncorners.bmp

/* @makedep: resources/obm_checkboxes.bmp */
OBM_CHECKBOXES BITMAP resources/obm_checkboxes.bmp

/* @makedep: resources/obm_check.bmp */
OBM_CHECK BITMAP resources/obm_check.bmp

/* @makedep: resources/obm_btsize.bmp */
OBM_BTSIZE BITMAP resources/obm_btsize.bmp

/* @makedep: resources/obm_old_lfarrow.bmp */
OBM_OLD_LFARROW BITMAP resources/obm_old_lfarrow.bmp

/* @makedep: resources/obm_old_rgarrow.bmp */
OBM_OLD_RGARROW BITMAP resources/obm_old_rgarrow.bmp

/* @makedep: resources/obm_old_dnarrow.bmp */
OBM_OLD_DNARROW BITMAP resources/obm_old_dnarrow.bmp

/* @makedep: resources/obm_old_uparrow.bmp */
OBM_OLD_UPARROW BITMAP resources/obm_old_uparrow.bmp

/* @makedep: resources/obm_size.bmp */
OBM_SIZE BITMAP resources/obm_size.bmp

/* @makedep: resources/obm_old_close.bmp */
OBM_OLD_CLOSE BITMAP resources/obm_old_close.bmp


/****************************************************************/
/* Cursors */

/* @makedep: resources/ocr_normal.cur */
OCR_NORMAL CURSOR resources/ocr_normal.cur

/* @makedep: resources/ocr_ibeam.cur */
OCR_IBEAM CURSOR resources/ocr_ibeam.cur

/* @makedep: resources/ocr_wait.cur */
OCR_WAIT CURSOR resources/ocr_wait.cur

/* @makedep: resources/ocr_cross.cur */
OCR_CROSS CURSOR resources/ocr_cross.cur

/* @makedep: resources/ocr_up.cur */
OCR_UP CURSOR resources/ocr_up.cur

/* @makedep: resources/ocr_size.cur */
OCR_SIZE CURSOR resources/ocr_size.cur

/* @makedep: resources/ocr_icon.cur */
OCR_ICON CURSOR resources/ocr_icon.cur

/* @makedep: resources/ocr_sizenwse.cur */
OCR_SIZENWSE CURSOR resources/ocr_sizenwse.cur

/* @makedep: resources/ocr_sizenesw.cur */
OCR_SIZENESW CURSOR resources/ocr_sizenesw.cur

/* @makedep: resources/ocr_sizewe.cur */
OCR_SIZEWE CURSOR resources/ocr_sizewe.cur

/* @makedep: resources/ocr_sizens.cur */
OCR_SIZENS CURSOR resources/ocr_sizens.cur

/* @makedep: resources/ocr_sizeall.cur */
OCR_SIZEALL CURSOR resources/ocr_sizeall.cur

/* @makedep: resources/ocr_no.cur */
OCR_NO CURSOR resources/ocr_no.cur

/* @makedep: resources/ocr_hand.cur */
OCR_HAND CURSOR resources/ocr_hand.cur

/* @makedep: resources/ocr_appstarting.cur */
OCR_APPSTARTING CURSOR resources/ocr_appstarting.cur

/* @makedep: resources/ocr_help.cur */
OCR_HELP CURSOR resources/ocr_help.cur

/* @makedep: resources/ocr_dragobject.cur */
OCR_DRAGOBJECT CURSOR resources/ocr_dragobject.cur


/****************************************************************/
/* Icons */

/* @makedep: resources/oic_sample.ico */
OIC_SAMPLE ICON resources/oic_sample.ico

/* @makedep: resources/oic_hand.ico */
OIC_HAND ICON resources/oic_hand.ico

/* @makedep: resources/oic_ques.ico */
OIC_QUES ICON resources/oic_ques.ico

/* @makedep: resources/oic_bang.ico */
OIC_BANG ICON resources/oic_bang.ico

/* @makedep: resources/oic_note.ico */
OIC_NOTE ICON resources/oic_note.ico

/* @makedep: resources/oic_winlogo.ico */
OIC_WINLOGO ICON resources/oic_winlogo.ico


/****************************************************************/
/* Version */

#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#define WINE_FILENAME_STR "user32.dll"

/* these values come from Windows XP SP2 */
#define WINE_FILEVERSION 5,1,2600,2180
#define WINE_FILEVERSION_STR "5.01.2600.2180"
#define WINE_PRODUCTVERSION 5,1,2600,2180
#define WINE_PRODUCTVERSION_STR "5.01.2600.2180"

#include "wine/wine_common_ver.rc"
