/*
 * XCOPY - Wine-compatible xcopy program
 *
 * Copyright (C) 2007 J. Edmeades
 *
 * 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 "xcopy.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_INVPARMS, "Invalid number of parameters - Use xcopy /? for help\n"
    STRING_INVPARM,  "Invalid parameter '%s' -  Use xcopy /? for help\n"
    STRING_PAUSE,    "Press <enter> to begin copying\n"
    STRING_SIMCOPY,  "%d file(s) would be copied\n"
    STRING_COPY,     "%d file(s) copied\n"
    STRING_QISDIR,   "Is '%s' a filename or directory\n\
                     on the target?\n\
                     (F - File, D - Directory)\n"
    STRING_SRCPROMPT,"%s? (Yes|No)\n"
    STRING_OVERWRITE,"Overwrite %s? (Yes|No|All)\n"
    STRING_COPYFAIL, "Copying of '%s' to '%s' failed with r/c %d\n"
    STRING_OPENFAIL, "Failed to open '%s'\n"
    STRING_READFAIL, "Failed during reading of '%s'\n"
    STRING_YES_CHAR, "#msgctxt#Yes key#Y"
    STRING_NO_CHAR,  "#msgctxt#No key#N"
    STRING_ALL_CHAR, "#msgctxt#All key#A"
    STRING_FILE_CHAR,"#msgctxt#File key#F"
    STRING_DIR_CHAR, "#msgctxt#Directory key#D"

    STRING_HELP,
"XCOPY - Copies source files or directory trees to a destination.\n\
\n\
Syntax:\n\
XCOPY source [destination] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\t     [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
\n\
Where:\n\
\n\
[/I]  Assume directory if destination does not exist and copying two or\n\
\tmore files.\n\
[/S]  Copy directories and subdirectories.\n\
[/E]  Copy directories and subdirectories, including any empty ones.\n\
[/Q]  Do not list names during copy, ie quiet.\n\
[/F]  Show full source and destination names during copy.\n\
[/L]  Simulate operation, showing names which would be copied.\n\
[/W]  Prompts before beginning the copy operation.\n\
[/T]  Creates empty directory structure but does not copy files.\n\
[/Y]  Suppress prompting when overwriting files.\n\
[/-Y] Enable prompting when overwriting files.\n\
[/P]  Prompts on each source file before copying.\n\
[/N]  Copy using short names.\n\
[/U]  Copy only files which already exist in destination.\n\
[/R]  Overwrite any read only files.\n\
[/H]  Include hidden and system files in the copy.\n\
[/C]  Continue even if an error occurs during the copy.\n\
[/A]  Only copy files with archive attribute set.\n\
[/M]  Only copy files with archive attribute set, removes the\n\
\tarchive attribute.\n\
[/D | /D:m-d-y] Copy new files or those modified after the supplied date.\n\
\t\tIf no date is supplied, only copy if destination is older\n\
\t\tthan source.\n\n"

}
