/*
 * 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 [ 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"
    STRING_OK, "OK"
    STRING_PAUSED, "Paused"
    STRING_SESSLOST, "Disconnected"
    STRING_NETERR "A network error occurred"
    STRING_CONN "Connection is being made"
    STRING_RECONN, "Reconnecting"
}
