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

#pragma makedep po

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"

}
