/* Regsvr32 resource strings
 *
 * Copyright 2003 Stefan Leichter
 * Copyright 2014 Hugh McMaster
 *
 * 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 "regsvr32.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_HEADER, "Wine DLL Registration Utility\n\n\
Provides DLL registration services.\n\n"
    STRING_USAGE, "Usage:\n\
\  regsvr32 [/u] [/s] [/n] [/i[:cmdline]] DllName\n\n\
Options:\n\
\  [/u]  Unregister a server.\n\
\  [/s]  Silent mode (no messages will be displayed).\n\
\  [/i]  Call DllInstall, passing an optional [cmdline].\n\
\tWhen used with [/u] DllInstall is called in uninstall mode.\n\
\  [/n]  Do not call DllRegisterServer. This option must be used with [/i].\n\n"
    STRING_UNRECOGNIZED_SWITCH, "regsvr32: Invalid or unrecognized switch [%1]\n\n"
    STRING_DLL_LOAD_FAILED, "regsvr32: Failed to load DLL '%1'\n"
    STRING_PROC_NOT_IMPLEMENTED, "regsvr32: '%1!S!' not implemented in DLL '%2'\n"
    STRING_REGISTER_FAILED, "regsvr32: Failed to register DLL '%1'\n"
    STRING_REGISTER_SUCCESSFUL, "regsvr32: Successfully registered DLL '%1'\n"
    STRING_UNREGISTER_FAILED, "regsvr32: Failed to unregister DLL '%1'\n"
    STRING_UNREGISTER_SUCCESSFUL, "regsvr32: Successfully unregistered DLL '%1'\n"
    STRING_INSTALL_FAILED, "regsvr32: Failed to install DLL '%1'\n"
    STRING_INSTALL_SUCCESSFUL, "regsvr32: Successfully installed DLL '%1'\n"
    STRING_UNINSTALL_FAILED, "regsvr32: Failed to uninstall DLL '%1'\n"
    STRING_UNINSTALL_SUCCESSFUL, "regsvr32: Successfully uninstalled DLL '%1'\n"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine Register Server"
#define WINE_FILENAME_STR "REGSVR32.EXE"
#define WINE_FILETYPE VFT_APP
#define WINE_FILEVERSION 5,1,2600,2180
#define WINE_FILEVERSION_STR "5.1.2600.2180"

#define WINE_PRODUCTVERSION 5,1,2600,2180
#define WINE_PRODUCTVERSION_STR "5.1"

#include "wine/wine_common_ver.rc"
