/*
 * The Spar Library - modular math parser
 * Copyright (C) 2000,2001 Davide Angelocola <davide178@inwind.it>
 *
 * 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.
 *
 * 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., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 *
 */

/**
 *  This file is partially generated by the configure script.
 *  Contains all common defines, typedef, enum used in all
 *  Spar sources and headers. 
 *
 *  Should be included into your programs and modules, however is
 *  included implicity by any of the spar header's.
 */ 

#ifndef _sl_conf_h
#define _sl_conf_h

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */

#undef NULL
#undef __BEGIN_DECLS
#undef __END_DECLS

#ifdef __cplusplus
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
#else
#define __BEGIN_DECLS 
#define __END_DECLS 
#endif

/*
 *  NULL
 *
 *  Defines the NULL pointer
 */
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *) 0)
#endif /* __cplusplus */

#ifndef __cplusplus
typedef enum { false, true } bool;
#endif /* __cplusplus */

#ifndef _EXTERN_INLINE
#ifdef __GNUC__
#define _EXTERN_INLINE extern __inline__
#else
#define _EXTERN_INLINE static
#endif
#endif

/**
 *  sl_assert() is a private assertion checking scheme, similar to standard
 *  <assert.h> but prints also the function that fails the assertion.
 *  
 *  This macro cannot be removed with the define NDEBUG: generally assertions 
 *  are meant for development, but might help when looking for a problem 
 *  later too. 
 *  
 *  On success this function does nothing.
 */ 

/*
 *  Implemented into assert.c file
 *  only shows 
 *
 *  	"file: function: line: SL assert fail 'expr'" message
 */
void __sl_assert_fail (const char *filename, const char *function, int line,
		                           const char *expr);

#define __assert_fail(expr)  __sl_assert_fail (__FILE__, __FUNCTION__, __LINE__, expr)

#define __assert_fail_line(expr)  __sl_assert_fail (__FILE__, "", __LINE__, expr)

#define __assert_fail_function(expr)  __sl_assert_fail (__FILE__, __FUNCTION__, "", expr)

#define sl_assert(expr) ((expr) ? 0 : __assert_fail (#expr))
#define sl_assert_line(expr) ((expr) ? 0 : __assert_fail_line (#expr))
#define sl_assert_function(expr) ((expr) ? 0 : __assert_fail_function (#expr))
/*
 *  other sublibs should be use this type
 *  such as: util, parser, module, constants ecc.. 
 */
typedef unsigned int sl_size;

/** Generic return code for all functions */
enum 
{
  /**
   *  This is returned on function success. It's widely used into spar sources
   *  because makes the code more readable. 
   *
   *  for example:
   *  
   *     if (sl_variable_set ("x", .756) == SL_SUCCESS)
   *  		sl_writeln ("variable 'x' added.");         
   */ 
  SL_SUCCESS = 0,
  
  /**
   *  This is returned on function errors. Generally when a function fails 
   *  an detailed error message is printed and the functions returns this
   *  value.
   *
   *  for example:
   *
   *     if (sl_variable_set ("e", 125.2) == SL_ERROR)
   *            sl_writeln ("error: variable 'e' wasn't added.");
   *  	      
   */
  SL_ERROR
};

/**
 * This is the max lenght of a identifier. You can change as you wish:
 * use only non-negative values
 */
#define SL_IDENTIFIER_LENGHT       15

/**
 * This is the max lenght of a message. You can change as you wish:
 * use only non-negative values
 */
#define SL_MESSAGE_LENGHT          45 

/**
 * This is the max number of variables (used at run-time). You can change as you * wish: use only non-negative values
 */
#define SL_MAX_VARIABLES           50

/**
 * This is the max number of variables (used at run-time). You can change as you * wish: use only non-negative values
 */
#define SL_MAX_MODULES             20

/**
 * This file contains the path of the modules to load
 */
#define SL_MODULE_CONFIG_FILE   "/usr/local/share/spar/modules_config"
#define SL_INCLUDE_DIRECTORY    "/usr/local/include/spar"

/**
 *  Infos
 */
#define SL_HOMEPAGE_URL		"http://spar.sourceforge.net"
#define SL_MIRROR_HOMEPAGE_URL	"http://web.tiscalinet.it/Davide18"
#define SL_AUTHOR_EMAIL		"davide178@inwind.it"
#define PACKAGE         "spar"
#define MAJOR_VERSION   0
#define MINOR_VERSION   5
#define PATCH_LEVEL     10
#define HOST            "i386-unknown-gnu"
#define STATUS          "development"

#define SL_MAX_BUFFER_LEN 	(2*1024)

/*
 *  Default precision
 */
#define SL_DEFAULT_INTEGER_PRECISION	15
#define SL_DEFAULT_DECIMAL_PRECISION	15
/**
 *  sl_identifier(x)
 *
 *  MACRO: declare a string "x" of lenght SL_IDENTIFIER_LENGHT
 */
#define sl_identifier(x)   char x[SL_IDENTIFIER_LENGHT + 1]

/**
 *  sl_message(x)
 *
 *  MACRO: declare a string "x" of lenght SL_MESSAGE_LENGHT
 */
#define sl_message(x)   char x[SL_MESSAGE_LENGHT + 1]

/**
 *  SL_SYMBOL_NOT_FOUND
 *
 *  Reterned by search function in case of insuccess
 */
#define SL_SYMBOL_NOT_FOUND        	-1
#define SL_INFINITY_SUPPORT		true	

#endif /* _sl_conf_h */


syntax highlighted by Code2HTML, v. 0.9.1