/*
 * 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_START,
"Start a program, or open a document in the program normally used for files with that suffix.\n\
Usage:\n\
start [options] program_filename [...]\n\
start [options] document_filename\n\
\n\
Options:\n\
\"title\"      Specifies the title of the child windows.\n\
/d directory Start the program in the specified directory.\n\
/b           Don't create a new console for the program.\n\
/i           Start the program with fresh environment variables.\n\
/min         Start the program minimized.\n\
/max         Start the program maximized.\n\
/low         Start the program in the idle priority class.\n\
/normal      Start the program in the normal priority class.\n\
/high        Start the program in the high priority class.\n\
/realtime    Start the program in the realtime priority class.\n\
/abovenormal Start the program in the abovenormal priority class.\n\
/belownormal Start the program in the belownormal priority class.\n\
/node n      Start the program on the specified NUMA node.\n\
/affinity mask Start the program with the specified affinity mask.\n\
/wait        Wait for the started program to finish, then exit with its exit code.\n\
/unix        Use a Unix filename and start the file like windows explorer.\n\
/ProgIDOpen  Open a document using the specified progID.\n\
/?           Display this help and exit.\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\
START\t\tStart a program, or open a document in the associated program\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)"
}
