/*
 * 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

#pragma makedep po

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 <directory> is the short version of CHDIR. It changes the current\n\
default directory.\n"
  WCMD_CHDIR,  "CHDIR <directory> 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\
Usage: FOR %variable IN (set) DO command\n\
\n\
The % sign must be doubled when using FOR in a batch file.\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 <directory> is the short version of RMDIR. It deletes a directory.\n"
  WCMD_RMDIR,  "RMDIR <directory> deletes a directory.\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 <directory> 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,"Microsoft Windows %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)"
  WCMD_NO_COMMAND_FOUND, "Can't recognize '%1' as an internal or external command, or batch script.\n"
  WCMD_DIVIDEBYZERO, "Division by zero error.\n"
  WCMD_NOOPERAND, "Expected an operand.\n"
  WCMD_NOOPERATOR, "Expected an operator.\n"
  WCMD_BADPAREN, "Mismatch in parentheses.\n"
  WCMD_BADHEXOCT, "Badly formed number - must be one of decimal (12),\n hexadecimal (0x34) or octal (056).\n"
}
