/*
 * Regedit resources
 *
 * Copyright 2002 Robert Dickenson
 *
 * 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
 */

/* English Neutral Resources */

LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
BEGIN
    ID_FAVORITES_ADDTOFAVORITES "Adds keys to the favourites list"
    ID_FAVORITES_REMOVEFAVORITE "Removes keys from the favourites list"
    /* Just a copy of the English (DEFAULT) strings. */
    ID_REGISTRY_EXIT        "Quits the registry editor"
    ID_VIEW_STATUSBAR       "Shows or hides the status bar"
    ID_VIEW_SPLIT           "Change position of split between two panes"
    ID_VIEW_REFRESH         "Refreshes the window"
    ID_EDIT_DELETE          "Deletes the selection"
    ID_EDIT_RENAME          "Renames the selection"
    ID_EDIT_COPYKEYNAME     "Copies the name of the selected key to the clipboard"
    ID_EDIT_FIND            "Finds a text string in a key, value or data"
    ID_EDIT_FINDNEXT        "Finds next occurrence of text specified in previous search"
END

IDR_REGEDIT_MENU MENU DISCARDABLE
BEGIN
    POPUP "&Registry"
    BEGIN
        MENUITEM "&Import Registry File...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "&Export Registry File...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "&Connect Network Registry...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "&Disconnect Network Registry...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",              ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_REGISTRY_EXIT
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Modify",                     ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
        MENUITEM "Find Ne&xt\tF3",              ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "&View"
    BEGIN
        MENUITEM "Status &Bar",                 ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "Sp&lit",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Refresh\tF5",                ID_VIEW_REFRESH
    END
    POPUP "&Favourites"
    BEGIN
        MENUITEM "&Add to Favourites...",          ID_FAVORITES_ADDTOFAVORITES
        MENUITEM "&Remove Favourite...",           ID_FAVORITES_REMOVEFAVORITE
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help Topics\tF1",            ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&About Registry Editor",      ID_HELP_ABOUT
    END
END

/* English Default (US) Resources */

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

/*
 * Menu
 */

IDR_REGEDIT_MENU MENU DISCARDABLE
BEGIN
    POPUP "&Registry"
    BEGIN
        MENUITEM "&Import Registry File...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "&Export Registry File...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "&Connect Network Registry...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "&Disconnect Network Registry...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",              ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_REGISTRY_EXIT
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Modify",                     ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
        MENUITEM "Find Ne&xt\tF3",              ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "&View"
    BEGIN
        MENUITEM "Status &Bar",                 ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "Sp&lit",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Refresh\tF5",                ID_VIEW_REFRESH
    END
    POPUP "&Favorites"
    BEGIN
        MENUITEM "&Add to Favorites...",          ID_FAVORITES_ADDTOFAVORITES
        MENUITEM "&Remove Favorite...",           ID_FAVORITES_REMOVEFAVORITE
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help Topics\tF1",            ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&About Registry Editor",      ID_HELP_ABOUT
    END
END

IDR_POPUP_MENUS MENU DISCARDABLE
BEGIN
  POPUP ""
  BEGIN
	MENUITEM "&Modify",                     ID_EDIT_MODIFY
	MENUITEM "Modify Binary Data",          ID_EDIT_MODIFY_BIN
	MENUITEM SEPARATOR
	MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
	MENUITEM "&Rename",                     ID_EDIT_RENAME
  END
  POPUP ""
  BEGIN
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Export...",                  ID_EDIT_EXPORT
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
  END
END


/*
 * Dialog
 */

IDD_EXPORT_TEMPLATE DIALOG DISCARDABLE  50, 50, 278, 54
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Export registry", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP
    AUTORADIOBUTTON "&All", IDC_EXPORT_ALL, 12, 15, 244, 12
    AUTORADIOBUTTON "S&elected branch:", IDC_EXPORT_SELECTED, 12, 30, 70, 12
    EDITTEXT IDC_EXPORT_PATH, 82, 30, 184, 12
END

IDD_FIND DIALOG DISCARDABLE  22, 17, 220, 85
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Find"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Find:",IDC_STATIC,5,7,119,8
    EDITTEXT        IDC_VALUE_NAME,40,5,125,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    LTEXT           "Find in:",IDC_STATIC,5, 22, 119, 8
    CHECKBOX        "Keys", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX        "Value names", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "Value content", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "Whole string only", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    DEFPUSHBUTTON   "Find",IDOK,175,5,40,15,WS_GROUP
    PUSHBUTTON      "Close",IDCANCEL,175,24,40,15, WS_GROUP
END

IDD_ADDFAVORITE DIALOG DISCARDABLE  22, 17, 210, 55
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Add Favorite"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDOK,120,36,40,15,WS_GROUP
    PUSHBUTTON      "Cancel",IDCANCEL,165,36,40,15,WS_GROUP
END

IDD_DELFAVORITE DIALOG DISCARDABLE  22, 17, 210, 90
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Remove Favorite"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Name:",IDC_STATIC,5,5,119,8
    LISTBOX         IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL
    DEFPUSHBUTTON   "OK",IDOK,120,72,40,15,WS_GROUP
    PUSHBUTTON      "Cancel",IDCANCEL,165,72,40,15,WS_GROUP
END

IDD_EDIT_STRING DIALOG DISCARDABLE  22, 17, 210, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Edit String"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDOK,120,56,40,15,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,165,56,40,15,WS_GROUP
END

IDD_EDIT_DWORD DIALOG DISCARDABLE  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Edit DWORD"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,90,8
    EDITTEXT        IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP
    GROUPBOX        "Base", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX
    AUTORADIOBUTTON "Hexadecimal", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP
    AUTORADIOBUTTON "Decimal", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP
    DEFPUSHBUTTON   "OK",IDOK,120,78,40,15,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,165,78,40,15,WS_GROUP
END

IDD_EDIT_BINARY DIALOG DISCARDABLE  22, 17, 170, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Edit Binary"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,160,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,90,8
    CONTROL         "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,5,40,160,40
    DEFPUSHBUTTON   "OK",IDOK,80,83,40,15,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,125,83,40,15,WS_GROUP
END

IDD_EDIT_MULTI_STRING DIALOG DISCARDABLE  22, 17, 210, 175
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Edit Multi String"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
    DEFPUSHBUTTON   "OK",IDOK,120,156,40,15,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,165,156,40,15,WS_GROUP
END

/*
 * String Table
 */

STRINGTABLE DISCARDABLE
BEGIN
    IDS_LIST_COLUMN_NAME    "Name"
    IDS_LIST_COLUMN_TYPE    "Type"
    IDS_LIST_COLUMN_DATA    "Data"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_APP_TITLE           "Registry Editor"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_MENU        "Contains commands for working with the whole registry"
    ID_EDIT_MENU            "Contains commands for editing values or keys"
    ID_VIEW_MENU            "Contains commands for customising the registry window"
    ID_FAVORITES_MENU       "Contains commands for accessing frequently used keys"
    ID_HELP_MENU            "Contains commands for displaying help and information about registry editor"
    ID_EDIT_NEW_MENU        "Contains commands for creating new keys or values"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_EDIT_MODIFY          "Modifies the value's data"
    ID_EDIT_NEW_KEY         "Adds a new key"
    ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
    ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
    ID_EDIT_NEW_DWORDVALUE  "Adds a new double word value"
    ID_EDIT_NEW_MULTI_STRINGVALUE "Adds a new multi string value"
    ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
    ID_REGISTRY_EXPORTREGISTRYFILE
                            "Exports all or part of the registry to a text file"
    ID_REGISTRY_CONNECTNETWORKREGISTRY
                            "Connects to a remote computer's registry"
    ID_REGISTRY_DISCONNECTNETWORKREGISTRY
                            "Disconnects from a remote computer's registry"
    ID_REGISTRY_PRINT       "Prints all or part of the registry"
/*    ID_HELP_HELPTOPICS      "Opens registry editor help" */
    ID_HELP_ABOUT           "Displays program information, version number and copyright"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_EXIT        "Quits the registry editor"
    ID_FAVORITES_ADDTOFAVORITES "Adds keys to the favorites list"
    ID_FAVORITES_REMOVEFAVORITE "Removes keys from the favorites list"
    ID_VIEW_STATUSBAR       "Shows or hides the status bar"
    ID_VIEW_SPLIT           "Change position of split between two panes"
    ID_VIEW_REFRESH         "Refreshes the window"
    ID_EDIT_DELETE          "Deletes the selection"
    ID_EDIT_RENAME          "Renames the selection"
    ID_EDIT_COPYKEYNAME     "Copies the name of the selected key to the clipboard"
    ID_EDIT_FIND            "Finds a text string in a key, value or data"
    ID_EDIT_FINDNEXT        "Finds next occurrence of text specified in previous search"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_ERROR		    "Error"
    IDS_BAD_KEY		    "Can't query key '%s'"
    IDS_BAD_VALUE           "Can't query value '%s'"
    IDS_UNSUPPORTED_TYPE    "Can't edit keys of this type (%ld)"
    IDS_TOO_BIG_VALUE       "Value is too big (%ld)"
    IDS_DELETE_BOX_TITLE    "Confirm Value Delete"
    IDS_DELETE_BOX_TEXT     "Are you sure you want to delete value '%s'?"
    IDS_NEWKEY              "New Key #%d"
    IDS_NEWVALUE            "New Value #%d"
    IDS_NOTFOUND            "Search string '%s' not found"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_FILEDIALOG_IMPORT_TITLE   "Import Registry File"
    IDS_FILEDIALOG_EXPORT_TITLE   "Export Registry File"
    IDS_FILEDIALOG_FILTER         "Registry Files\0*.reg\0Win9x/NT4 Registry Files (REGEDIT4)\0*.reg\0All Files (*.*)\0*.*\0\0"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_REGISTRY_ROOT_NAME           "My Computer"
    IDS_REGISTRY_DEFAULT_VALUE       "(Default)"
    IDS_REGISTRY_VALUE_NOT_SET       "(value not set)"
    IDS_REGISTRY_VALUE_CANT_DISPLAY  "(cannot display value)"
    IDS_REGISTRY_UNKNOWN_TYPE        "(unknown %d)"
END

/*****************************************************************/

/*
 * TEXTINCLUDE
 */

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END



/*
 * String Table
 */

/*
 *STRINGTABLE DISCARDABLE
 *BEGIN
 *    ID_HELP_HELPTOPICS      "Opens Registry Editor Help."
 *    ID_HELP_ABOUT           "Displays program information, version number, and copyright."
 *END
 */

/*****************************************************************/
