/*
 * ATTRIB - Wine-compatible attrib program
 *
 * Copyright 2011 Christian Costa
 *
 * 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 "attrib.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_NYI, "Not Yet Implemented\n\n"
    STRING_FILENOTFOUND, "%1: File Not Found\n"
    STRING_HELP,
"ATTRIB - Displays or changes file attributes.\n\
\n\
Syntax:\n\
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [drive:][path][filename]\n\
\       [/S [/D]]\n\
\n\
\Where:\n\
\n\
\  +   Sets an attribute.\n\
\  -   Clears an attribute.\n\
\  R   Read-only file attribute.\n\
\  A   Archive file attribute.\n\
\  S   System file attribute.\n\
\  H   Hidden file attribute.\n\
\  [drive:][path][filename]\n\
\      Specifies a file or files for attrib to process.\n\
\  /S  Processes matching files in the current folder and all subfolders.\n\
\  /D  Processes folders as well.\n"
}
