/*
 * 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 from\n\
another batch file. When the batch file exits, control returns to the file\n\
which called it. The CALL command may supply parameters to the called\n\
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 on\n\
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 batch\n\
file.\n\
\n\
The label which is the target of a GOTO may be up to 255 characters long\n\
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 first\n\
one will always be executed. Attempting to GOTO a nonexistent label\n\
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\n\
subdirectories 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 from\n\
the registry). To change the setting follow the PATH command with the new\n\
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 of\n\
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 action,\n\
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\n\
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\n\
               exit code.\n\
/unix          Use a Unix filename and start the file like windows\n\
               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 space\n\
before the equals sign, nor can the variable name have embedded spaces.\n\
\n\
Under Wine, the environment of the underlying operating system is included\n\
into the Win32 environment, there will generally therefore be many more\n\
values than in a native Win32 implementation. Note that it is not possible\n\
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 the\n\
list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n\
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 if\n\
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 which\n\
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 stack, and then\n\
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\n\
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\n\
currently defined.\n\
If used with only a file type, displays the associated open command string,\n\
if any.\n\
Specifying no open command after the equal sign removes the command string\n\
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 presses an allowed Key\n\
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 to the operating\n\
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"
}
