/*
 * NET.EXE - Wine-compatible net program
 *
 * 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
 */

#include "resources.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "The syntax of this command is:\n\nNET command [arguments]\n    -or-\nNET command /HELP\n\nWhere 'command' is one of HELP, START, STOP or USE.\n"
    STRING_START_USAGE, "The syntax of this command is:\n\nNET START [service]\n\nDisplays the list of running services if 'service' is omitted. Otherwise 'service' is the name of the service to start.\n"
    STRING_STOP_USAGE, "The syntax of this command is:\n\nNET STOP service\n\nWhere 'service' is the name of the service to stop.\n"
    STRING_STOP_DEP, "Stopping dependent service: %1\n"
    STRING_CANT_STOP, "Could not stop service %1\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 %1 service is starting.\n"
    STRING_START_SVC_SUCCESS, "The %1 service was started successfully.\n"
    STRING_START_SVC_FAIL, "The %1 service failed to start.\n"
    STRING_STOP_SVC, "The %1 service is stopping.\n"
    STRING_STOP_SVC_SUCCESS, "The %1 service was stopped successfully.\n"
    STRING_STOP_SVC_FAIL, "The %1 service failed to stop.\n"
    STRING_RUNNING_HEADER, "The following services are running:\n"
    STRING_NO_ENTRIES, "There are no entries in the list.\n"
    STRING_USE_HEADER, "\nStatus  Local   Remote\n---------------------------------------------------------------\n"
    STRING_USE_ENTRY,  "%1      %2      %3      Open resources: %4!u!\n"
    STRING_OK, "OK"
    STRING_PAUSED, "Paused"
    STRING_SESSLOST, "Disconnected"
    STRING_NETERR "A network error occurred"
    STRING_CONN "Connection is being made"
    STRING_RECONN, "Reconnecting"
}
