/*
 * Wine command prompt resources
 *
 * Copyright (C) 1999 D A Pickles
 *
 * 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 "wcmd.h"

/* @makedep: wcmd.ico */
IDI_ICON1 ICON wcmd.ico

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
  WCMD_ATTRIB, "ATTRIB shows or changes DOS file attributes.\n"
  WCMD_CALL,
"CALL <batchfilename> is used within a batch file to execute commands\n\
from another batch file. When the batch file exits, control returns to\n\
the file which called it. The CALL command may supply parameters to the\n\
called procedure.\n\
\n\
Changes to default directory, environment variables etc made within a\n\
called procedure are inherited by the caller.\n"

  WCMD_CD,     "CD <dir> is the short version of CHDIR. It changes the current\n\
default directory.\n"
  WCMD_CHDIR,  "CHDIR <dir> changes the current default directory.\n"

  WCMD_CLS,    "CLS clears the console screen.\n"

  WCMD_COPY,   "COPY <filename> copies a file.\n"
  WCMD_CTTY,   "CTTY changes the input/output device.\n"
  WCMD_DATE,   "DATE shows or changes the system date.\n"
  WCMD_DEL,    "DEL <filename> deletes a file or set of files.\n"
  WCMD_DIR,    "DIR lists the contents of a directory.\n"

  WCMD_ECHO,
"ECHO <string> displays <string> on the current terminal device.\n\
\n\
ECHO ON causes all subsequent commands in a batch file to be displayed\n\
on the terminal device before they are executed.\n\
\n\
ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n\
default). The ECHO OFF command can be prevented from displaying by\n\
preceding it with an @ sign.\n"

  WCMD_ERASE,  "ERASE <filename> deletes a file or set of files.\n"

  WCMD_FOR,
"The FOR command is used to execute a command for each of a set of files.\n\
\n\
Syntax: FOR %variable IN (set) DO command\n\
\n\
The requirement to double the % sign when using FOR in a batch file does\n\
not exist in wine's cmd.\n"

  WCMD_GOTO,
"The GOTO command transfers execution to another statement within a\n\
batch file.\n\
\n\
The label which is the target of a GOTO may be up to 255 characters\n\
long but may not include spaces (this is different from other operating\n\
systems). If two or more identical labels exist in a batch file the\n\
first one will always be executed. Attempting to GOTO a nonexistent\n\
label terminates the batch file execution.\n\
\n\
GOTO has no effect when used interactively.\n"

  WCMD_HELP,   "HELP <command> shows brief help details on a topic.\n\
HELP without an argument shows all CMD built-in commands.\n"

  WCMD_IF,
"IF is used to conditionally execute a command.\n\
\n\
Syntax:	IF [NOT] EXIST filename command\n\
	IF [NOT] string1==string2 command\n\
	IF [NOT] ERRORLEVEL number command\n\
\n\
In the second form of the command, string1 and string2 must be in double\n\
quotes. The comparison is not case-sensitive.\n"

  WCMD_LABEL,  "LABEL is used to set a disk volume label.\n\
\n\
Syntax: LABEL [drive:]\n\
The command will prompt you for the new volume label for the given drive.\n\
You can display the disk volume label with the VOL command.\n"

  WCMD_MD,
"MD <name> is the short version of MKDIR. It creates a subdirectory.\n"
  WCMD_MKDIR,  "MKDIR <name> creates a subdirectory.\n"
  WCMD_MOVE,
"MOVE relocates a file or directory to a new point within the file system.\n\
\n\
If the item being moved is a directory then all the files and subdirectories\n\
below the item are moved as well.\n\
\n\
MOVE fails if the old and new locations are on different DOS drive letters.\n"

  WCMD_PATH,
"PATH displays or changes the cmd search path.\n\
\n\
Entering PATH will display the current PATH setting (initially taken\n\
from the registry). To change the setting follow the\n\
PATH command with the new value.\n\
\n\
It is also possible to modify the PATH by using the PATH environment\n\
variable, for example:\n\
		PATH %PATH%;c:\\temp\n"

  WCMD_PAUSE,
"PAUSE displays a message on the screen 'Press Return key to continue'\n\
and waits for the user to press the Return key. It is mainly useful in\n\
batch files to allow the user to read the output of a previous command\n\
before it scrolls off the screen.\n"

  WCMD_PROMPT,
"PROMPT sets the command-line prompt.\n\
\n\
The string following the PROMPT command (and the space immediately after)\n\
appears at the beginning of the line when cmd is waiting for input.\n\
\n\
The following character strings have the special meaning shown:\n\
\n\
$$    Dollar sign         $_    Linefeed            $b    Pipe sign (|)\n\
$d    Current date        $e    Escape              $g    > sign\n\
$l    < sign              $n    Current drive       $p    Current path\n\
$q    Equal sign          $t    Current time        $v    cmd version\n\
\n\
Note that entering the PROMPT command without a prompt-string resets the\n\
prompt to the default, which is the current directory (which includes the\n\
current drive letter) followed by a greater-than (>) sign.\n\
(like a command PROMPT $p$g).\n\
\n\
The prompt can also be changed by altering the PROMPT environment variable,\n\
so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'\n"

  WCMD_REM,
"A command line beginning REM (followed by a space) performs no\n\
action, and can therefore be used as a comment in a batch file.\n"

  WCMD_REN,
"REN <filename> is the short version of RENAME. It renames a file.\n"
  WCMD_RENAME, "RENAME <filename> renames a file.\n"
  WCMD_RD,
"RD <dir> is the short version of RMDIR. It deletes a subdirectory.\n"
  WCMD_RMDIR,  "RMDIR <dir> deletes a subdirectory.\n"

  WCMD_SET,
"SET displays or changes the cmd environment variables.\n\
\n\
SET without parameters shows all of the current environment.\n\
\n\
To create or modify an environment variable the syntax is:\n\
\n\
      SET <variable>=<value>\n\
\n\
where <variable> and <value> are character strings. There must be no\n\
spaces before the equals sign, nor can the variable name\n\
have embedded spaces.\n\
\n\
Under Wine, the environment of the underlying operating system is\n\
included into the Win32 environment, there will generally therefore be\n\
many more values than in a native Win32 implementation. Note that it is\n\
not possible to affect the operating system environment from within cmd.\n"

  WCMD_SHIFT,
"SHIFT is used in a batch file to remove one parameter from the head of\n\
the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n\
if called from the command line.\n"

  WCMD_TIME,   "TIME sets or shows the current system time.\n"

  WCMD_TITLE,  "Sets the window title for the cmd window, syntax TITLE [string]\n"

  WCMD_TYPE,
"TYPE <filename> copies <filename> to the console device (or elsewhere\n\
if redirected). No check is made that the file is readable text.\n"

  WCMD_VERIFY,
"VERIFY is used to set, clear or test the verify flag. Valid forms are:\n\
\n\
VERIFY ON\tSet the flag\n\
VERIFY OFF\tClear the flag\n\
VERIFY\t\tDisplays ON or OFF as appropriate.\n\
\n\
The verify flag has no function in Wine.\n"

  WCMD_VER,
"VER displays the version of cmd you are running.\n"

  WCMD_VOL,    "VOL shows the volume label of a disk device.\n"

  WCMD_ENDLOCAL,
"ENDLOCAL ends localization of environment changes in a batch file\n\
which were introduced by a preceding SETLOCAL.\n"

  WCMD_SETLOCAL,
"SETLOCAL starts localization of environment changes in a batch file.\n\
\n\
Environment changes done after a SETLOCAL are local to the batch file, and\n\
are preserved until the next ENDLOCAL is encountered (or at the end of the\n\
file, whichever comes first), at which point the previous environment\n\
settings are restored.\n"

  WCMD_PUSHD,  "PUSHD <directoryname> saves the current directory onto a\n\
stack, and then changes the current directory to the supplied one.\n"

  WCMD_POPD,   "POPD changes current directory to the last one saved with\n\
PUSHD.\n"

  WCMD_MORE,   "MORE displays output of files or piped input in pages.\n"

  WCMD_CHOICE, "CHOICE displays a text and waits, until the User\n\
presses an allowed Key from a selectable list.\n\
CHOICE is mainly used to build a menu selection in a batch file.\n"

  WCMD_EXIT,
"EXIT terminates the current command session and returns\n\
to the operating system or shell from which you invoked cmd.\n"

  WCMD_ALLHELP, "CMD built-in commands are:\n\
ATTRIB\t\tShow or change DOS file attributes\n\
CALL\t\tInvoke a batch file from inside another\n\
CD (CHDIR)\tChange current default directory\n\
CHOICE\t\tWait for an keypress from a selectable list\n\
CLS\t\tClear the console screen\n\
COPY\t\tCopy file\n\
CTTY\t\tChange input/output device\n\
DATE\t\tShow or change the system date\n\
DEL (ERASE)\tDelete a file or set of files\n\
DIR\t\tList the contents of a directory\n\
ECHO\t\tCopy text directly to the console output\n\
ENDLOCAL\tEnd localization of environment changes in a batch file\n\
HELP\t\tShow brief help details on a topic\n\
MD (MKDIR)\tCreate a subdirectory\n\
MORE\t\tDisplay output in pages\n\
MOVE\t\tMove a file, set of files or directory tree\n\
PATH\t\tSet or show the search path\n\
POPD\t\tRestores the directory to the last one saved with PUSHD\n\
PROMPT\t\tChange the command prompt\n\
PUSHD\t\tChanges to a new directory, saving the current one\n\
REN (RENAME)\tRename a file\n\
RD (RMDIR)\tDelete a subdirectory\n\
SET\t\tSet or show environment variables\n\
SETLOCAL\tStart localization of environment changes in a batch file\n\
TIME\t\tSet or show the current system time\n\
TITLE\t\tSet the window title for the CMD session\n\
TYPE\t\tType the contents of a text file\n\
VER\t\tShow the current version of CMD\n\
VOL\t\tShow the volume label of a disk device\n\
EXIT\t\tClose down CMD\n\n\
Enter HELP <command> for further information on any of the above commands\n"

  WCMD_CONFIRM, "Are you sure"
  WCMD_YES, "#msgctxt#Yes key#Y"
  WCMD_NO, "#msgctxt#No key#N"
  WCMD_NOASSOC, "File association missing for extension %s\n"
  WCMD_NOFTYPE, "No open command associated with file type '%s'\n"
  WCMD_OVERWRITE, "Overwrite %s"
  WCMD_MORESTR, "More..."
  WCMD_TRUNCATEDLINE, "Line in Batch processing possibly truncated. Using:\n"
  WCMD_NYI, "Not Yet Implemented\n\n"
  WCMD_NOARG, "Argument missing\n"
  WCMD_SYNTAXERR, "Syntax error\n"
  WCMD_FILENOTFOUND, "%s: File Not Found\n"
  WCMD_NOCMDHELP, "No help available for %s\n"
  WCMD_NOTARGET, "Target to GOTO not found\n"
  WCMD_CURRENTDATE, "Current Date is %s\n"
  WCMD_CURRENTTIME, "Current Time is %s\n"
  WCMD_NEWDATE, "Enter new date: "
  WCMD_NEWTIME, "Enter new time: "
  WCMD_MISSINGENV, "Environment variable %s not defined\n"
  WCMD_READFAIL, "Failed to open '%s'\n"
  WCMD_CALLINSCRIPT, "Cannot call batch label outside of a batch script\n"
  WCMD_ALL, "#msgctxt#All key#A"
  WCMD_DELPROMPT, "%s, Delete"
  WCMD_ECHOPROMPT, "Echo is %s\n"
  WCMD_VERIFYPROMPT, "Verify is %s\n"
  WCMD_VERIFYERR, "Verify must be ON or OFF\n"
  WCMD_ARGERR, "Parameter error\n"
  WCMD_VOLUMEDETAIL, "Volume in drive %c is %s\nVolume Serial Number is %04x-%04x\n\n"
  WCMD_VOLUMEPROMPT, "Volume label (11 characters, ENTER for none)?"
  WCMD_NOPATH, "PATH not found\n"
  WCMD_ANYKEY,"Press Return key to continue: "
  WCMD_CONSTITLE,"Wine Command Prompt"
  WCMD_VERSION,"CMD Version %s\n"
  WCMD_MOREPROMPT, "More? "
  WCMD_LINETOOLONG, "The input line is too long.\n"
}
