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

}
