/*
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *
 * 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 "notepad_res.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&File" {
  MENUITEM "&New\tCtrl+N",      CMD_NEW
  MENUITEM "&Open...\tCtrl+O",  CMD_OPEN
  MENUITEM "&Save\tCtrl+S",     CMD_SAVE
  MENUITEM "Save &as...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Print...\tCtrl+P",            CMD_PRINT
  MENUITEM "Page Se&tup...",    CMD_PAGE_SETUP
  MENUITEM "P&rinter Setup...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "E&xit",             CMD_EXIT
 }
POPUP "&Edit" {
  MENUITEM "&Undo\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "Cu&t\tCtrl+X",      CMD_CUT
  MENUITEM "&Copy\tCtrl+C",     CMD_COPY
  MENUITEM "&Paste\tCtrl+V",    CMD_PASTE
  MENUITEM "&Delete\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Select &all\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&Time/Date\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Wrap long lines",  CMD_WRAP
  MENUITEM "&Font...",          CMD_FONT
 }
POPUP "&Search" {
  MENUITEM "&Search...\tCtrl+F",   CMD_SEARCH
  MENUITEM "&Search next\tF3",  CMD_SEARCH_NEXT
  MENUITEM "&Replace...\tCtrl+H", CMD_REPLACE
 }
POPUP "&Help" {
  MENUITEM "&Contents\tF1",     CMD_HELP_CONTENTS
  MENUITEM "&About Notepad",    CMD_HELP_ABOUT_NOTEPAD
 }
}

STRINGTABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "Page &p"

STRING_NOTEPAD,                                 "Notepad"
STRING_ERROR,                                   "ERROR"
STRING_WARNING,                                 "WARNING"
STRING_INFO,                                    "Information"

STRING_UNTITLED,                                "Untitled"

STRING_ALL_FILES,                               "All files (*.*)"
STRING_TEXT_FILES_TXT,                  "Text files (*.txt)"

STRING_TOOLARGE,                                "File '%s' is too large for notepad.\n\
Please use a different editor."
STRING_NOTEXT,                                  "You didn't enter any text.\
\nPlease type something and try again"
STRING_DOESNOTEXIST,                            "File '%s' does not exist.\n\n\
Do you want to create a new file?"
STRING_NOTSAVED,                                "File '%s' has been modified.\n\n\
Would you like to save the changes?"
STRING_NOTFOUND,                                        "'%s' could not be found."
STRING_OUT_OF_MEMORY,                   "Not enough memory to complete this \
task.\nClose one or more applications to increase the amount of free memory."

STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 big-endian)"
STRING_UTF8,           "Unicode (UTF-8)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
This file contains Unicode characters which will be lost if\n\
you save this file in the %s encoding.\n\
To keep these characters, click Cancel, and then select\n\
one of the Unicode options in the Encoding drop down list.\n\
Continue?"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: notepad.ico */
IDI_NOTEPAD ICON "notepad.ico"
