/*
 * Copyright 2001 Eric Pouech
 *
 * 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 "wineconsole_res.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
IDS_EDIT,		"&Edit"
IDS_DEFAULT,		"Set &Defaults"
IDS_PROPERTIES,		"&Properties"
IDS_MARK,		"&Mark"
IDS_COPY,		"&Copy"
IDS_PASTE,		"&Paste"
IDS_SELECTALL,		"&Select all"
IDS_SCROLL,		"Sc&roll"
IDS_SEARCH,		"S&earch"
IDS_FNT_DISPLAY,	"Each character is %1!u! pixels wide and %2!u! pixels high"
IDS_FNT_PREVIEW,	"This is a test"
IDS_DLG_TIT_DEFAULT,    "Setup - Default settings"
IDS_DLG_TIT_CURRENT,    "Setup - Current settings"
IDS_DLG_TIT_ERROR,	"Configuration error"
IDS_DLG_ERR_SBWINSIZE,	"Screen buffer size must be greater or equal to the window's one"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: Couldn't parse event id\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: Invalid backend\n"
IDS_CMD_INVALID_OPTION     "wineconsole: Unrecognized command line option\n"
IDS_CMD_ABOUT              "Starts a program in a Wine console\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: Starting program %s failed.\nThe command is invalid.\n"

IDS_USAGE_HEADER           "\nUsage:\n  wineconsole [options] <command>\n\nOptions:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  Choosing user will spawn a new window, curses will\n\
\                           try to setup the current terminal as a Wine console.\n"
IDS_USAGE_COMMAND          "  <command>                The Wine program to launch in the console.\n"
IDS_USAGE_FOOTER           "\nExample:\n  wineconsole cmd\nStarts the Wine command prompt in a Wine console.\n\n"

END

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Options"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Cursor size", -1, 5, 5, 65, 56, BS_GROUPBOX
	AUTORADIOBUTTON "&Small", IDC_OPT_CURSOR_SMALL, 9, 18, 50, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Medium", IDC_OPT_CURSOR_MEDIUM, 9, 30, 50, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Large", IDC_OPT_CURSOR_LARGE, 9, 42, 50, 10, WS_TABSTOP

	GROUPBOX "Control", -1, 75, 5, 125, 56, BS_GROUPBOX
	LTEXT "Popup menu", -1, 79, 18, 50, 18
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 138, 18, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 138, 30, 60, 10, WS_TABSTOP
	LTEXT "Quick edit", -1, 79, 42, 50, 18
	AUTOCHECKBOX "&enable", IDC_OPT_QUICK_EDIT, 138, 42, 60, 10, WS_TABSTOP

	GROUPBOX "Command history", -1, 5, 63, 195, 40, BS_GROUPBOX
	LTEXT "&Number of recalled commands:", -1, 9, 75, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 87, 77, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	AUTOCHECKBOX "&Remove doubles", IDC_OPT_HIST_NODOUBLE, 125, 75, 60, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Font"
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Font", -1, 5, 5, 50, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Color", -1, 100, 5, 50, 8
	CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
	CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
	LTEXT "&Size", -1, 158, 5, 40, 8
	LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL
	CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
	LTEXT "", IDC_FNT_FONT_INFO, 128, 73, 80, 27
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Configuration"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Buffer zone", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Width:", -1, 14, 25, 54, 9
	EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "&Height:", -1, 14, 39, 54, 9
	EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Window size", -1, 10, 55, 100, 42
	LTEXT "W&idth:", -1, 14, 69, 54, 9
	EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "H&eight:", -1, 14, 83, 54, 9
	EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "End of program", -1, 115, 11, 85, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Close console", IDC_CNF_CLOSE_EXIT, 119, 25, 75, 20, WS_TABSTOP

	GROUPBOX "Edition", -1, 115, 55, 85, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 75, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 210, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Console parameters"
FONT 8, "MS Shell Dlg"
{
	AUTORADIOBUTTON "Retain these settings for later sessions", IDC_SAV_SAVE, 10, 8, 200, 10, WS_TABSTOP
	AUTORADIOBUTTON "Modify only current session", IDC_SAV_SESSION, 10, 22, 200, 10, WS_TABSTOP

        DEFPUSHBUTTON "OK", IDOK, 100, 43, 50, 14
	PUSHBUTTON "Cancel", IDCANCEL, 155, 43, 50, 14
}
