/*
 * 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_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 asking the user to press a key.\n\
\n\
It is mainly useful in batch files to allow the user to read the output\n\
of a previous command 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 with 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\
space 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,  "TITLE <string> sets the window title for the cmd window.\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 PUSHD.\n"

  WCMD_ASSOC,   "ASSOC shows or modifies file extension associations.\n\
\n\
Syntax: ASSOC [.ext[=[fileType]]]\n\
\n\
ASSOC without parameters displays current file associations.\n\
If used with only a file extension, displays the current association.\n\
Specifying no file type after the equal sign removes the current association, if any.\n"

  WCMD_FTYPE,   "FTYPE shows or modifies open commands associated with file types.\n\
\n\
Syntax: FTYPE [fileType[=[openCommand]]]\n\
\n\
Without parameters, shows the file types for which open command strings \
are currently defined.\n\
If used with only a file type, displays the associated open command string, \
if any.\n\
Specifying no open command after the equal sign removes the command string \
associated to the specified file type.\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\
ASSOC\t\tShow or modify file extension associations\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\
FTYPE\t\tShow or modify open commands associated with file types\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\
PAUSE\t\tSuspend execution of a batch file\n\
POPD\t\tRestore the directory to the last one saved with PUSHD\n\
PROMPT\t\tChange the command prompt\n\
PUSHD\t\tChange 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\
XCOPY\t\tCopy source files or directory trees to a destination\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 %1\n"
  WCMD_NOFTYPE, "No open command associated with file type '%1'\n"
  WCMD_OVERWRITE, "Overwrite %1?"
  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, "%1: File Not Found\n"
  WCMD_NOCMDHELP, "No help available for %1\n"
  WCMD_NOTARGET, "Target to GOTO not found\n"
  WCMD_CURRENTDATE, "Current Date is %1\n"
  WCMD_CURRENTTIME, "Current Time is %1\n"
  WCMD_NEWDATE, "Enter new date: "
  WCMD_NEWTIME, "Enter new time: "
  WCMD_MISSINGENV, "Environment variable %1 not defined\n"
  WCMD_READFAIL, "Failed to open '%1'\n"
  WCMD_CALLINSCRIPT, "Cannot call batch label outside of a batch script\n"
  WCMD_ALL, "#msgctxt#All key#A"
  WCMD_DELPROMPT, "Delete %1?"
  WCMD_ECHOPROMPT, "Echo is %1\n"
  WCMD_VERIFYPROMPT, "Verify is %1\n"
  WCMD_VERIFYERR, "Verify must be ON or OFF\n"
  WCMD_ARGERR, "Parameter error\n"
  WCMD_VOLUMESERIALNO, "Volume Serial Number is %1!04x!-%2!04x!\n\n"
  WCMD_VOLUMEPROMPT, "Volume label (11 characters, <Enter> for none)?"
  WCMD_NOPATH, "PATH not found\n"
  WCMD_ANYKEY,"Press any key to continue... "
  WCMD_CONSTITLE,"Wine Command Prompt"
  WCMD_VERSION,"CMD Version %1!S!\n"
  WCMD_MOREPROMPT, "More? "
  WCMD_LINETOOLONG, "The input line is too long.\n"
  WCMD_VOLUMELABEL, "Volume in drive %1!c! is %2\n"
  WCMD_VOLUMENOLABEL, "Volume in drive %1!c! has no label.\n"
  WCMD_YESNO, " (Yes|No)"
  WCMD_YESNOALL, " (Yes|No|All)"
}
