// 
// Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This code is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License version 2 only, as
// published by the Free Software Foundation.  Oracle designates this
// particular file as subject to the "Classpath" exception as provided
// by Oracle in the LICENSE file that accompanied this code.
//
// This code 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 General Public License
// version 2 for more details (a copy is included in the LICENSE file that
// accompanied this code).
//
// You should have received a copy of the GNU General Public License version
// 2 along with this work; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
//
// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
// or visit www.oracle.com if you need additional information or have any
// questions.
//

#include "windows.h"

// Need 2 defines so macro argument to XSTR will get expanded before quoting.
#define XSTR(x) STR(x)
#define STR(x)  #x

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

HAND_CURSOR  CURSOR  DISCARDABLE "hand.cur"
AWT_ICON     ICON    DISCARDABLE "awt.ico"
CHECK_BITMAP BITMAP  DISCARDABLE "check.bmp"

// Note: the number of icons used is specified in the
// securityWarningIconCounter constant in awt_Toolkit.cpp.
SECURITY_WARNING_0  ICON    DISCARDABLE "security_warning_bw.ico"
SECURITY_WARNING_1  ICON    DISCARDABLE "security_warning_int.ico"
SECURITY_WARNING_2  ICON    DISCARDABLE "security_warning.ico"


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION    JDK_FVER
 PRODUCTVERSION JDK_FVER
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 // FILEOS 0x4 is Win32, 0x40004 is Win32 NT only
 FILEOS 0x4L
 // FILETYPE should be 0x1 for .exe and 0x2 for .dll
 FILETYPE JDK_FTYPE
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName",      XSTR(JDK_COMPANY)       "\0"
            VALUE "FileDescription",  XSTR(JDK_COMPONENT)     "\0"
            VALUE "FileVersion",      XSTR(JDK_VER)           "\0"
            VALUE "Full Version",     XSTR(JDK_BUILD_ID)      "\0"
	    VALUE "InternalName",     XSTR(JDK_INTERNAL_NAME) "\0"
            VALUE "LegalCopyright",   XSTR(JDK_COPYRIGHT)     "\0"
            VALUE "OriginalFilename", XSTR(JDK_FNAME)         "\0"
            VALUE "ProductName",      XSTR(JDK_NAME)          "\0"
            VALUE "ProductVersion",   XSTR(JDK_VER)           "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
