/*
 * Task termination utility
 * English language support
 *
 * Copyright 2010 Andrew Nguyen
 *
 * 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 "taskkill.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n"
    STRING_INVALID_OPTION, "Error: Unknown or invalid command line option specified.\n"
    STRING_INVALID_PARAM, "Error: Invalid command line parameter specified.\n"
    STRING_MISSING_OPTION, "Error: One of options /im or /pid must be specified.\n"
    STRING_MISSING_PARAM, "Error: Option %s expects a command line parameter.\n"
    STRING_MUTUAL_EXCLUSIVE, "Error: Options /im and /pid are mutually exclusive.\n"
    STRING_CLOSE_PID_SEARCH, "Close message sent to top-level windows of process with PID %u.\n"
    STRING_CLOSE_PROC_SRCH, "Close message sent to top-level windows of process \"%s\" with PID %u.\n"
    STRING_TERM_PID_SEARCH, "Process with PID %u was forcibly terminated.\n"
    STRING_TERM_PROC_SEARCH, "Process \"%s\" with PID %u was forcibly terminated.\n"
    STRING_SEARCH_FAILED, "Error: Could not find process \"%s\".\n"
    STRING_ENUM_FAILED, "Error: Unable to enumerate the process list.\n"
    STRING_TERMINATE_FAILED, "Error: Unable to terminate process \"%s\".\n"
    STRING_SELF_TERMINATION, "Error: Process self-termination is not permitted.\n"
}
