/*
 * 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 ]\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\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"
}
