/*
 * WineFile
 * English Language Support
 *
 * Copyright 2000 Martin Fuchs
 * Copyright 2002 Steven Edwards
 * Copyright 2002 Alexandre Julliard
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

/* Menu */

IDM_WINEFILE MENU FIXED IMPURE
{
	POPUP "&File"  {
		MENUITEM "&Open\tEnter" ,			101
		MENUITEM "&Move...\tF7" , 			106
		MENUITEM "&Copy...\tF8" ,			107
		MENUITEM "&In Clipboard...\tF9" ,		118
		MENUITEM "&Delete\tDel" ,			108
		MENUITEM "Re&name..." ,			109
		MENUITEM "Propert&ies...\tAlt+Enter" , ID_EDIT_PROPERTIES
		MENUITEM SEPARATOR
		MENUITEM "C&ompress..." ,		119
		MENUITEM "Dec&ompress..." ,		120
		MENUITEM SEPARATOR
		MENUITEM "&Run..." ,			ID_EXECUTE
		MENUITEM "&Print..." , 			102
		MENUITEM "Associate..." ,		103
		MENUITEM SEPARATOR
		MENUITEM "Cr&eate Directory..." ,			111
		MENUITEM "Searc&h..." ,			104
		MENUITEM "&Select Files..." ,			116
		MENUITEM SEPARATOR
#ifndef _NO_EXTENSIONS
		MENUITEM "E&xit\tAlt+X" , 			ID_FILE_EXIT
#else
		MENUITEM "E&xit", 				ID_FILE_EXIT
#endif
	}

	POPUP "&Disk"  {
		MENUITEM "&Copy Disk..." ,			201
		MENUITEM "&Label Disk..." ,			202
		MENUITEM SEPARATOR
		MENUITEM "&Format Disk..." ,			203
#ifdef _WIN95
		MENUITEM "&Make System Disk...", -1	/*@@ */
#endif
		MENUITEM SEPARATOR
		MENUITEM "Connect &Network Drive" ,			252
		MENUITEM "&Disconnect Network Drive" ,		253
		MENUITEM SEPARATOR
		MENUITEM "Share as..." ,			254
		MENUITEM "&Remove Share..." ,			255
		MENUITEM SEPARATOR
		MENUITEM "&Select Drive..." ,			251
	}

	POPUP "&Directories"  {
		MENUITEM "&Next Level\t+" ,			301
		MENUITEM "Expand &Tree\t*" ,		302
		MENUITEM "Expand &all\tStrg+*" ,		303
		MENUITEM "Collapse &Tree\t-" ,			304
		MENUITEM SEPARATOR
		MENUITEM "&Mark Childs" ,				505
	}

	POPUP "&View"  {
		MENUITEM "T&ree and Directory" ,			413
		MENUITEM "Tr&ee Only" ,			411
		MENUITEM "Directory &Only" ,			412
		MENUITEM SEPARATOR
		MENUITEM "Sp&lit" ,			414
		MENUITEM SEPARATOR
		MENUITEM "&Name" ,			ID_VIEW_NAME
		MENUITEM "&All File Details" ,				ID_VIEW_ALL_ATTRIBUTES, CHECKED
		MENUITEM "&Partial Details..." ,			ID_VIEW_SELECTED_ATTRIBUTES
		MENUITEM SEPARATOR
		MENUITEM "&Sort by Name" ,		404
		MENUITEM "Sort &by Type" ,		405
		MENUITEM "Sort by Si&ze" , 		406
		MENUITEM "Sort by &Date" , 		407
		MENUITEM SEPARATOR
		MENUITEM "Sort by &..." ,			409
	}

	POPUP "&Options"  {
		MENUITEM "&Confirmation..." ,		-1
		MENUITEM "&Font..." ,			-1
		MENUITEM "Customize Tool&bar..." , -1
		MENUITEM SEPARATOR
		MENUITEM "&Toolbar" ,		ID_VIEW_TOOL_BAR, CHECKED
		MENUITEM "&Drivebar" ,		ID_VIEW_DRIVE_BAR, CHECKED
		MENUITEM "&Status Bar" ,	ID_VIEW_STATUSBAR, CHECKED
#ifndef _NO_EXTENSIONS
		MENUITEM "F&ull Screen\tCtrl+Shift+S" , 	ID_VIEW_FULLSCREEN
#endif
		MENUITEM SEPARATOR
		MENUITEM "&Minize on run" ,		-1
		MENUITEM "&Save settings on exit" ,			511
	}


	POPUP "&Security"  {
		MENUITEM "&Access..." ,		605
		MENUITEM "&Logging..." ,			606
		MENUITEM "&Owner..." ,		607
	}

	POPUP "&Window"  {
		MENUITEM "New &Window" ,			ID_WINDOW_NEW
		MENUITEM "Cascading\tCtrl+F5" ,		ID_WINDOW_CASCADE
		MENUITEM "Tile &Horizontally" ,		ID_WINDOW_TILE_HORZ
		MENUITEM "Tile &Vertically\tCtrl+F4" ,		ID_WINDOW_TILE_VERT
#ifndef _NO_EXTENSIONS
		MENUITEM "Arrange Automatically" ,		ID_WINDOW_AUTOSORT
#endif
		MENUITEM "Arrange &Symbols" ,		ID_WINDOW_ARRANGE
		MENUITEM "&Refresh\tF5" ,		ID_REFRESH
	}

	POPUP "&?"  {
		MENUITEM "&Help Topics\tF1" ,			ID_HELP
		MENUITEM "Help &Search...\tF1" ,			ID_HELP
		MENUITEM "&Using Help\tF1" ,			ID_HELP_USING
		MENUITEM SEPARATOR
		POPUP "Info..."  {
		  MENUITEM "Info about &Wine..." ,			ID_ABOUT_WINE
/*
 *		  MENUITEM "&License..."		ID_LICENSE
 *		  MENUITEM "&NO WARRANTY"		ID_NO_WARRANTY
 */
		}
	}
}


IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Execute"
FONT 8, "MS Shell Dlg"
{
	CONTROL 		"", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10
	CONTROL 		"&Command:" , -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10
	EDITTEXT		201, 3, 29, 134, 12, ES_AUTOHSCROLL
	CONTROL 		"As &Symbol" , 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12
	DEFPUSHBUTTON	"OK" , 1, 158, 6, 47, 14
	PUSHBUTTON		"Cancel" , 2, 158, 23, 47, 14
	PUSHBUTTON		"&Help" , 254, 158, 43, 47, 14
}
