/*
 * 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 '%1' - Use xcopy /? for help\n"
    STRING_PAUSE,    "Press <Enter> to begin copying\n"
    STRING_SIMCOPY,  "%1!d! file(s) would be copied\n"
    STRING_COPY,     "%1!d! file(s) copied\n"
    STRING_QISDIR,   "Is '%1' a filename or directory\n\
                     on the target?\n\
                     (F - File, D - Directory)\n"
    STRING_SRCPROMPT,"%1? (Yes|No)\n"
    STRING_OVERWRITE,"Overwrite %1? (Yes|No|All)\n"
    STRING_COPYFAIL, "Copying of '%1' to '%2' failed with r/c %3!d!\n"
    STRING_OPENFAIL, "Failed to open '%1'\n"
    STRING_READFAIL, "Failed during reading of '%1'\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, that is be 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"

}
