// vi:set ts=8 sts=4 sw=4 noet:
//
// VIM - Vi IMproved	by Bram Moolenaar
//
// Do ":help uganda"  in Vim to read copying and usage conditions.
// Do ":help credits" in Vim to see a list of people who contributed.

// vim.rc
//   Icon and version information for the Win32 version of Vim
//   Must be in DOS format <CR><NL>!

#include <winver.h>
#include "version.h"
#include "gui_w32_rc.h"
// #if defined(__BORLANDC__) || defined(__CYGWIN32__) || defined(__MINGW32__)
# include <winresrc.h>
// #else
// # include <winres.h>
// #endif

//
// Icons
//
IDR_VIM		ICON "vim.ico"

#ifdef FEAT_GUI_W32
IDR_VIM_ERROR	ICON "vim_error.ico"
IDR_VIM_ALERT	ICON "vim_alert.ico"
IDR_VIM_INFO	ICON "vim_info.ico"
IDR_VIM_QUESTION ICON "vim_quest.ico"

//
// Bitmaps
//
IDB_TEAROFF	BITMAP  DISCARDABLE  "tearoff.bmp"
IDR_TOOLBAR1	BITMAP  DISCARDABLE  "tools.bmp"

//
// WinXP theme support
//
#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
# define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#endif
#ifndef RT_MANIFEST
# define RT_MANIFEST 24
#endif

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gvim.exe.mnf"
#endif // FEAT_GUI_W32

//
// Type Library
//
#ifdef FEAT_OLE
 1 TYPELIB "vim.tlb"
#endif

//
// Version
//

VS_VERSION_INFO		VERSIONINFO
  FILEVERSION		VIM_VERSION_MAJOR,VIM_VERSION_MINOR,VIM_VERSION_BUILD,VIM_VERSION_PATCHLEVEL
  PRODUCTVERSION	VIM_VERSION_MAJOR,VIM_VERSION_MINOR,VIM_VERSION_BUILD,VIM_VERSION_PATCHLEVEL
  FILEFLAGSMASK		VS_FFI_FILEFLAGSMASK

#if VIM_VERSION_PATCHLEVEL > 0
 #ifdef _DEBUG
  FILEFLAGS		VS_FF_PRERELEASE | VS_FF_DEBUG | VS_FF_PATCHED
 #else
  FILEFLAGS		VS_FF_PRERELEASE | VS_FF_PATCHED
 #endif
#else
 #ifdef _DEBUG
  FILEFLAGS		VS_FF_PRERELEASE | VS_FF_DEBUG
 #else
  FILEFLAGS		VS_FF_PRERELEASE
 #endif
#endif

  FILEOS		VOS__WINDOWS32
  FILETYPE		VFT_APP
  FILESUBTYPE		0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    // 0x0409 == U.S. English; 0x04E4 => Windows Multilingual
    BLOCK "040904E4"
    BEGIN
	VALUE "CompanyName",		"Vim Developers\0"
	VALUE "FileDescription",	"Vi Improved - A Text Editor\0"
	VALUE "FileVersion",		VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR  "\0"
	VALUE "InternalName",		"VIM\0"
	VALUE "LegalCopyright",		"Copyright \251 1996\0"
	VALUE "LegalTrademarks",	"Vim\0"
	VALUE "OriginalFilename",	"VIM.EXE\0"
	VALUE "ProductName",		"Vim\0"
	VALUE "ProductVersion",		VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR "\0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
	VALUE "Translation", 0x409, 0x4E4
  END
END

/*
 *  Printing Status Dialog (should only be used when FEAT_PRINTER is defined)
 */
#define IDC_BOX1		400
#define IDC_PRINTTEXT1		401
#define IDC_PRINTTEXT2		402
#define IDC_PROGRESS		403
PRINTDLGBOX DIALOG 115, 63, 210, 80
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
FONT 8, "Helv"
BEGIN
    DEFPUSHBUTTON   "Cancel", IDCANCEL, 85, 60, 40, 14
    CTEXT	    "Printing",IDC_PRINTTEXT1,23,15,157,9
    CTEXT	    " ",IDC_PRINTTEXT2,23,25,157,9
    CTEXT	    "Initializing...",IDC_PROGRESS,24,38,157,9
    GROUPBOX	    "",IDC_BOX1,19,9,170,47
END
