/*
 * REG.EXE - Wine-compatible reg program.
 *
 * Copyright 2008 Andrew Riedi
 *
 * 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 "reg.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "The syntax of this command is:\n\nREG [ ADD | DELETE | QUERY ]\nREG command /?\n"
    STRING_ADD_USAGE, "REG ADD key_name [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n"
    STRING_DELETE_USAGE, "REG DELETE key_name [/v value_name | /ve | /va] [/f]\n"
    STRING_QUERY_USAGE, "REG QUERY key_name [/v value_name | /ve] [/s]\n"
    STRING_SUCCESS, "The operation completed successfully\n"
    STRING_INVALID_KEY, "Error: Invalid key name\n"
    STRING_INVALID_CMDLINE, "Error: Invalid command line parameters\n"
    STRING_NO_REMOTE, "Error: Unable to access remote machine\n"
    STRING_CANNOT_FIND, "Error: The system was unable to find the specified registry key or value\n"
    STRING_UNSUPPORTED_TYPE, "Error: Unsupported type\n"
}
