/*
 * NET.EXE - Wine-compatible net program
 * English language support
 *
 * Copyright (C) 2007 Tim Schwartz
 *
 * 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
 */

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "The syntax of this command is:\n\nNET [ HELP | START | STOP | USE]\n"
    STRING_START_USAGE, "Specify service name to start.\n"
    STRING_STOP_USAGE, "Specify service name to stop.\n"
    STRING_STOP_DEP, "Stopping dependent service: %s\n"
    STRING_CANT_STOP, "Could not stop service %s\n"
    STRING_NO_SCM, "Could not get handle to service control manager.\n"
    STRING_NO_SVCHANDLE, "Could not get handle to service.\n"
    STRING_START_SVC, "The %s service is starting.\n"
    STRING_START_SVC_SUCCESS, "The %s service was started successfully.\n"
    STRING_START_SVC_FAIL, "The %s service failed to start.\n"
    STRING_STOP_SVC, "The %s service is stopping.\n"
    STRING_STOP_SVC_SUCCESS, "The %s service was stopped successfully.\n"
    STRING_STOP_SVC_FAIL, "The %s service failed to stop.\n"
    STRING_HELP_USAGE, "The syntax of this command is:\n\nNET HELP command\n    -or-\nNET command /HELP\n\n"\
                       "   Commands available are:\n   NET HELP    NET START     NET STOP     NET USE\n"
    STRING_NO_ENTRIES, "There are no entries in the list.\n"
    STRING_USE_HEADER, "\nStatus  Local   Remote\n---------------------------------------------------------------\n"
    STRING_USE_ENTRY,  "%s      %S      %S      Open resources: %lu\n"
}
