diff -r d59bea55db9b -r c445c931472f src/glpenv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/glpenv.h Mon Dec 06 13:09:21 2010 +0100 @@ -0,0 +1,228 @@ +/* glpenv.h (GLPK environment) */ + +/*********************************************************************** +* This code is part of GLPK (GNU Linear Programming Kit). +* +* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +* 2009, 2010 Andrew Makhorin, Department for Applied Informatics, +* Moscow Aviation Institute, Moscow, Russia. All rights reserved. +* E-mail: . +* +* GLPK is free software: you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GLPK 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 General Public +* License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GLPK. If not, see . +***********************************************************************/ + +#ifndef GLPENV_H +#define GLPENV_H + +#include "glpstd.h" +#include "glplib.h" + +typedef struct ENV ENV; +typedef struct MEM MEM; +typedef struct XFILE XFILE; + +#define ENV_MAGIC 0x454E5631 +/* environment block magic value */ + +#define TERM_BUF_SIZE 4096 +/* terminal output buffer size, in bytes */ + +#define IOERR_MSG_SIZE 1024 +/* i/o error message buffer size, in bytes */ + +#define MEM_MAGIC 0x4D454D31 +/* memory block descriptor magic value */ + +struct ENV +{ /* environment block */ + int magic; + /* magic value used for debugging */ + char version[7+1]; + /* version string returned by the routine glp_version */ + /*--------------------------------------------------------------*/ + /* terminal output */ + char *term_buf; /* char term_buf[TERM_BUF_SIZE]; */ + /* terminal output buffer */ + int term_out; + /* flag to enable/disable terminal output */ + int (*term_hook)(void *info, const char *s); + /* user-defined routine to intercept terminal output */ + void *term_info; + /* transit pointer (cookie) passed to the routine term_hook */ + FILE *tee_file; + /* output stream used to copy terminal output */ + /*--------------------------------------------------------------*/ + /* error handling */ + const char *err_file; + /* value of the __FILE__ macro passed to glp_error */ + int err_line; + /* value of the __LINE__ macro passed to glp_error */ + void (*err_hook)(void *info); + /* user-defined routine to intercept abnormal termination */ + void *err_info; + /* transit pointer (cookie) passed to the routine err_hook */ + /*--------------------------------------------------------------*/ + /* memory allocation */ + glp_long mem_limit; + /* maximal amount of memory (in bytes) available for dynamic + allocation */ + MEM *mem_ptr; + /* pointer to the linked list of allocated memory blocks */ + int mem_count; + /* total number of currently allocated memory blocks */ + int mem_cpeak; + /* peak value of mem_count */ + glp_long mem_total; + /* total amount of currently allocated memory (in bytes; is the + sum of the size field over all memory block descriptors) */ + glp_long mem_tpeak; + /* peak value of mem_total */ + /*--------------------------------------------------------------*/ + /* stream input/output */ + XFILE *file_ptr; + /* pointer to the linked list of active stream descriptors */ + char *ioerr_msg; /* char ioerr_msg[IOERR_MSG_SIZE]; */ + /* input/output error message buffer */ + /*--------------------------------------------------------------*/ + /* shared libraries support */ + void *h_odbc; + /* handle to ODBC shared library */ + void *h_mysql; + /* handle to MySQL shared library */ +}; + +struct MEM +{ /* memory block descriptor */ + int flag; + /* descriptor flag */ + int size; + /* size of block (in bytes, including descriptor) */ + MEM *prev; + /* pointer to previous memory block descriptor */ + MEM *next; + /* pointer to next memory block descriptor */ +}; + +struct XFILE +{ /* input/output stream descriptor */ + int type; + /* stream handle type: */ +#define FH_FILE 0x11 /* FILE */ +#define FH_ZLIB 0x22 /* gzFile */ + void *fh; + /* pointer to stream handle */ + XFILE *prev; + /* pointer to previous stream descriptor */ + XFILE *next; + /* pointer to next stream descriptor */ +}; + +#define XEOF (-1) + +#define get_env_ptr _glp_get_env_ptr +ENV *get_env_ptr(void); +/* retrieve pointer to environment block */ + +#define tls_set_ptr _glp_tls_set_ptr +void tls_set_ptr(void *ptr); +/* store global pointer in TLS */ + +#define tls_get_ptr _glp_tls_get_ptr +void *tls_get_ptr(void); +/* retrieve global pointer from TLS */ + +#define xprintf glp_printf +void glp_printf(const char *fmt, ...); +/* write formatted output to the terminal */ + +#define xvprintf glp_vprintf +void glp_vprintf(const char *fmt, va_list arg); +/* write formatted output to the terminal */ + +#ifndef GLP_ERROR_DEFINED +#define GLP_ERROR_DEFINED +typedef void (*_glp_error)(const char *fmt, ...); +#endif + +#define xerror glp_error_(__FILE__, __LINE__) +_glp_error glp_error_(const char *file, int line); +/* display error message and terminate execution */ + +#define xassert(expr) \ + ((void)((expr) || (glp_assert_(#expr, __FILE__, __LINE__), 1))) +void glp_assert_(const char *expr, const char *file, int line); +/* check for logical condition */ + +#define xmalloc glp_malloc +void *glp_malloc(int size); +/* allocate memory block */ + +#define xcalloc glp_calloc +void *glp_calloc(int n, int size); +/* allocate memory block */ + +#define xfree glp_free +void glp_free(void *ptr); +/* free memory block */ + +#define xtime glp_time +glp_long glp_time(void); +/* determine current universal time */ + +#define xdifftime glp_difftime +double glp_difftime(glp_long t1, glp_long t0); +/* compute difference between two time values, in seconds */ + +#define lib_err_msg _glp_lib_err_msg +void lib_err_msg(const char *msg); + +#define xerrmsg _glp_lib_xerrmsg +const char *xerrmsg(void); + +#define xfopen _glp_lib_xfopen +XFILE *xfopen(const char *fname, const char *mode); + +#define xferror _glp_lib_xferror +int xferror(XFILE *file); + +#define xfeof _glp_lib_xfeof +int xfeof(XFILE *file); + +#define xfgetc _glp_lib_xfgetc +int xfgetc(XFILE *file); + +#define xfputc _glp_lib_xfputc +int xfputc(int c, XFILE *file); + +#define xfflush _glp_lib_xfflush +int xfflush(XFILE *fp); + +#define xfclose _glp_lib_xfclose +int xfclose(XFILE *file); + +#define xfprintf _glp_lib_xfprintf +int xfprintf(XFILE *file, const char *fmt, ...); + +#define xdlopen _glp_xdlopen +void *xdlopen(const char *module); + +#define xdlsym _glp_xdlsym +void *xdlsym(void *h, const char *symbol); + +#define xdlclose _glp_xdlclose +void xdlclose(void *h); + +#endif + +/* eof */