/***************************************************************************
 *
 * diagnostic.h
 *
 * $Id: diagnostic.h 448754 2006-09-22 00:42:16Z sebor $
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you under  the Apache
 * License, Version  2.0 (the  "License"); you may  not use  this file
 * except in  compliance with the License.   You may obtain  a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the  License is distributed on an  "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
 * implied.   See  the License  for  the  specific language  governing
 * permissions and limitations under the License.
 *
 * Copyright 2001-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#ifndef RWSTD_UTIL_DIAGNOSTIC_H_INCLUDED
#define RWSTD_UTIL_DIAGNOSTIC_H_INCLUDED

#include "scanner.h"  // for token_t

enum {
    E_FIRST   = 100,
    E_SYMUSED = 101,   // symbol used before defined
    E_OPENRD  = 109,   // opening a file for reading
    E_OPENWR  = 110,   // opening a file for writing
    E_PAIR    = 111,   // invalid pair of symbolic characters (<A>,<B>)
    E_COLNUM  = 114,   // bad number of collation orders
    E_CVT2EXT = 123,   // convert a character to external representation
    E_SYMEND  = 127,   // unterminated symbolic name (missing '>')
    E_CVT     = 136,   // error converting a character
    E_IFMT    = 135,   // invalid integer format
    E_MBCHAR  = 308,   // illegal/incomplete multibyte character
    E_UCS     = 315,   // ill-formed or invalid UCS character
    E_MBTOWC  = 310,   // mbtowc() error
    E_RANGE   = 311,   // invalid range (ellipsis)
    E_SYNTAX  = 312,   // bad syntax
    E_COLORD  = 133,   // bad collating order
    E_REORD   = 291,   // bad reorder-after
    E_INVAL   = 399,   // invalid value
    E_CMDARG  = 401,   // invalid command line argument
    E_XARG    = 402,   // extra command line argument
    E_NOARG   = 403,   // missing command line argument
    E_OPTARG  = 404,   // missing argument to a command line option
    E_CALL    = 405,   // system or libc call failed
    E_NOTSUP  = 712,   // feature not supported (hard error)
    E_LAST    = 699,

    W_FIRST   = 700,
    W_DISABLE = 700,   // disable all warnings
    W_COMPAT  = 701,   // no compatible locale installed
    W_NOPCS   = 702,   // PCS character value not defined
    W_COLSYM  = 703,   // undefined collating symbol or collating element
    W_MISSING = 704,   // missing value
    W_REORD   = 705,   // bad reorder-after
    W_ICONV   = 706,   // iconv_open() or iconv() error
    W_SYM     = 707,   // unknown symbolic constant
    W_CHAR    = 708,   // unknown character (no corresponding symbol)
    W_CHARMAP = 709,   // unknown charmap
    W_SYNTAX  = 709,   // recoverable syntax error
    W_RANGE   = 710,   // recoverable invalid range
    W_INVAL   = 711,   // recoverable invalid value
    W_CALL    = 712,   // system or libc call failed
    W_NOTSUP  = 713,   // feature not supported (will be ignored)
    W_LAST    = 799,

    I_FIRST   = 800,
    I_ENABLE  = 800,    // enable all informational messages
    I_STAGE   = 801,    // information about stages of processing
    I_OPENRD  = 802,    // information about files being opened for reading
    I_OPENWR  = 803,    // information about files being opened for writing
    I_READ    = 804,    // information about data reads
    I_WRITE   = 805,    // information about data writes
    I_SKIP    = 806,    // information about skpping an operation
    I_LAST    = 899
};


bool issue_diag (int id, bool is_error, 
                 const Scanner::token_t* token, 
                 const char *fmt, ...);

#endif   // RWSTD_UTIL_DIAGNOSTIC_H_INCLUDED
