/*
 * Copyright 2009 Piotr Caban
 *
 * 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 "resource.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    IDS_TO_PRIMITIVE        "Error converting object to primitive type"
    IDS_INVALID_CALL_ARG    "Invalid procedure call or argument"
    IDS_SUBSCRIPT_OUT_OF_RANGE "Subscript out of range"
    IDS_OBJECT_REQUIRED     "Object required"
    IDS_CREATE_OBJ_ERROR    "Automation server can't create object"
    IDS_NO_PROPERTY         "Object doesn't support this property or method"
    IDS_UNSUPPORTED_ACTION  "Object doesn't support this action"
    IDS_ARG_NOT_OPT         "Argument not optional"
    IDS_SYNTAX_ERROR        "Syntax error"
    IDS_SEMICOLON           "Expected ';'"
    IDS_LBRACKET            "Expected '('"
    IDS_RBRACKET            "Expected ')'"
    IDS_EXPECTED_IDENTIFIER "Expected identifier"
    IDS_EXPECTED_ASSIGN     "Expected '='"
    IDS_INVALID_CHAR        "Invalid character"
    IDS_UNTERMINATED_STR    "Unterminated string constant"
    IDS_MISPLACED_RETURN    "'return' statement outside of function"
    IDS_INVALID_BREAK       "Can't have 'break' outside of loop"
    IDS_INVALID_CONTINUE    "Can't have 'continue' outside of loop"
    IDS_LABEL_REDEFINED     "Label redefined"
    IDS_LABEL_NOT_FOUND     "Label not found"
    IDS_EXPECTED_CCEND      "Expected '@end'"
    IDS_DISABLED_CC         "Conditional compilation is turned off"
    IDS_EXPECTED_AT         "Expected '@'"
    IDS_NOT_FUNC            "Function expected"
    IDS_NOT_DATE            "'[object]' is not a date object"
    IDS_NOT_NUM             "Number expected"
    IDS_OBJECT_EXPECTED     "Object expected"
    IDS_ILLEGAL_ASSIGN      "Illegal assignment"
    IDS_UNDEFINED           "'|' is undefined"
    IDS_NOT_BOOL            "Boolean object expected"
    IDS_INVALID_DELETE      "Cannot delete '|'"
    IDS_NOT_VBARRAY         "VBArray object expected"
    IDS_JSCRIPT_EXPECTED    "JScript object expected"
    IDS_REGEXP_SYNTAX_ERROR "Syntax error in regular expression"
    IDS_URI_INVALID_CODING  "URI to be decoded is incorrect"
    IDS_URI_INVALID_CHAR    "URI to be encoded contains invalid characters"
    IDS_FRACTION_DIGITS_OUT_OF_RANGE "Number of fraction digits is out of range"
    IDS_PRECISION_OUT_OF_RANGE "Precision is out of range"
    IDS_INVALID_LENGTH      "Array length must be a finite positive integer"
    IDS_ARRAY_EXPECTED      "Array object expected"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: jscript.rgs */
2 WINE_REGISTRY jscript.rgs

#define WINE_FILEDESCRIPTION_STR "Wine JScript"
#define WINE_FILENAME_STR "jscript.dll"
#define WINE_FILEVERSION 5,7,7601,16982
#define WINE_FILEVERSION_STR "5.8.7601.16982"
#define WINE_PRODUCTVERSION 5,8,7601,16982
#define WINE_PRODUCTVERSION_STR "5.8.7601.16982"

#include "wine/wine_common_ver.rc"
