src/glpenv.h
changeset 1 c445c931472f
equal deleted inserted replaced
-1:000000000000 0:61d049d64aec
       
     1 /* glpenv.h (GLPK environment) */
       
     2 
       
     3 /***********************************************************************
       
     4 *  This code is part of GLPK (GNU Linear Programming Kit).
       
     5 *
       
     6 *  Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
       
     7 *  2009, 2010 Andrew Makhorin, Department for Applied Informatics,
       
     8 *  Moscow Aviation Institute, Moscow, Russia. All rights reserved.
       
     9 *  E-mail: <mao@gnu.org>.
       
    10 *
       
    11 *  GLPK is free software: you can redistribute it and/or modify it
       
    12 *  under the terms of the GNU General Public License as published by
       
    13 *  the Free Software Foundation, either version 3 of the License, or
       
    14 *  (at your option) any later version.
       
    15 *
       
    16 *  GLPK is distributed in the hope that it will be useful, but WITHOUT
       
    17 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
       
    18 *  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
       
    19 *  License for more details.
       
    20 *
       
    21 *  You should have received a copy of the GNU General Public License
       
    22 *  along with GLPK. If not, see <http://www.gnu.org/licenses/>.
       
    23 ***********************************************************************/
       
    24 
       
    25 #ifndef GLPENV_H
       
    26 #define GLPENV_H
       
    27 
       
    28 #include "glpstd.h"
       
    29 #include "glplib.h"
       
    30 
       
    31 typedef struct ENV ENV;
       
    32 typedef struct MEM MEM;
       
    33 typedef struct XFILE XFILE;
       
    34 
       
    35 #define ENV_MAGIC 0x454E5631
       
    36 /* environment block magic value */
       
    37 
       
    38 #define TERM_BUF_SIZE 4096
       
    39 /* terminal output buffer size, in bytes */
       
    40 
       
    41 #define IOERR_MSG_SIZE 1024
       
    42 /* i/o error message buffer size, in bytes */
       
    43 
       
    44 #define MEM_MAGIC 0x4D454D31
       
    45 /* memory block descriptor magic value */
       
    46 
       
    47 struct ENV
       
    48 {     /* environment block */
       
    49       int magic;
       
    50       /* magic value used for debugging */
       
    51       char version[7+1];
       
    52       /* version string returned by the routine glp_version */
       
    53       /*--------------------------------------------------------------*/
       
    54       /* terminal output */
       
    55       char *term_buf; /* char term_buf[TERM_BUF_SIZE]; */
       
    56       /* terminal output buffer */
       
    57       int term_out;
       
    58       /* flag to enable/disable terminal output */
       
    59       int (*term_hook)(void *info, const char *s);
       
    60       /* user-defined routine to intercept terminal output */
       
    61       void *term_info;
       
    62       /* transit pointer (cookie) passed to the routine term_hook */
       
    63       FILE *tee_file;
       
    64       /* output stream used to copy terminal output */
       
    65       /*--------------------------------------------------------------*/
       
    66       /* error handling */
       
    67       const char *err_file;
       
    68       /* value of the __FILE__ macro passed to glp_error */
       
    69       int err_line;
       
    70       /* value of the __LINE__ macro passed to glp_error */
       
    71       void (*err_hook)(void *info);
       
    72       /* user-defined routine to intercept abnormal termination */
       
    73       void *err_info;
       
    74       /* transit pointer (cookie) passed to the routine err_hook */
       
    75       /*--------------------------------------------------------------*/
       
    76       /* memory allocation */
       
    77       glp_long mem_limit;
       
    78       /* maximal amount of memory (in bytes) available for dynamic
       
    79          allocation */
       
    80       MEM *mem_ptr;
       
    81       /* pointer to the linked list of allocated memory blocks */
       
    82       int mem_count;
       
    83       /* total number of currently allocated memory blocks */
       
    84       int mem_cpeak;
       
    85       /* peak value of mem_count */
       
    86       glp_long mem_total;
       
    87       /* total amount of currently allocated memory (in bytes; is the
       
    88          sum of the size field over all memory block descriptors) */
       
    89       glp_long mem_tpeak;
       
    90       /* peak value of mem_total */
       
    91       /*--------------------------------------------------------------*/
       
    92       /* stream input/output */
       
    93       XFILE *file_ptr;
       
    94       /* pointer to the linked list of active stream descriptors */
       
    95       char *ioerr_msg; /* char ioerr_msg[IOERR_MSG_SIZE]; */
       
    96       /* input/output error message buffer */
       
    97       /*--------------------------------------------------------------*/
       
    98       /* shared libraries support */
       
    99       void *h_odbc;
       
   100       /* handle to ODBC shared library */
       
   101       void *h_mysql;
       
   102       /* handle to MySQL shared library */
       
   103 };
       
   104 
       
   105 struct MEM
       
   106 {     /* memory block descriptor */
       
   107       int flag;
       
   108       /* descriptor flag */
       
   109       int size;
       
   110       /* size of block (in bytes, including descriptor) */
       
   111       MEM *prev;
       
   112       /* pointer to previous memory block descriptor */
       
   113       MEM *next;
       
   114       /* pointer to next memory block descriptor */
       
   115 };
       
   116 
       
   117 struct XFILE
       
   118 {     /* input/output stream descriptor */
       
   119       int type;
       
   120       /* stream handle type: */
       
   121 #define FH_FILE   0x11  /* FILE   */
       
   122 #define FH_ZLIB   0x22  /* gzFile */
       
   123       void *fh;
       
   124       /* pointer to stream handle */
       
   125       XFILE *prev;
       
   126       /* pointer to previous stream descriptor */
       
   127       XFILE *next;
       
   128       /* pointer to next stream descriptor */
       
   129 };
       
   130 
       
   131 #define XEOF (-1)
       
   132 
       
   133 #define get_env_ptr _glp_get_env_ptr
       
   134 ENV *get_env_ptr(void);
       
   135 /* retrieve pointer to environment block */
       
   136 
       
   137 #define tls_set_ptr _glp_tls_set_ptr
       
   138 void tls_set_ptr(void *ptr);
       
   139 /* store global pointer in TLS */
       
   140 
       
   141 #define tls_get_ptr _glp_tls_get_ptr
       
   142 void *tls_get_ptr(void);
       
   143 /* retrieve global pointer from TLS */
       
   144 
       
   145 #define xprintf glp_printf
       
   146 void glp_printf(const char *fmt, ...);
       
   147 /* write formatted output to the terminal */
       
   148 
       
   149 #define xvprintf glp_vprintf
       
   150 void glp_vprintf(const char *fmt, va_list arg);
       
   151 /* write formatted output to the terminal */
       
   152 
       
   153 #ifndef GLP_ERROR_DEFINED
       
   154 #define GLP_ERROR_DEFINED
       
   155 typedef void (*_glp_error)(const char *fmt, ...);
       
   156 #endif
       
   157 
       
   158 #define xerror glp_error_(__FILE__, __LINE__)
       
   159 _glp_error glp_error_(const char *file, int line);
       
   160 /* display error message and terminate execution */
       
   161 
       
   162 #define xassert(expr) \
       
   163       ((void)((expr) || (glp_assert_(#expr, __FILE__, __LINE__), 1)))
       
   164 void glp_assert_(const char *expr, const char *file, int line);
       
   165 /* check for logical condition */
       
   166 
       
   167 #define xmalloc glp_malloc
       
   168 void *glp_malloc(int size);
       
   169 /* allocate memory block */
       
   170 
       
   171 #define xcalloc glp_calloc
       
   172 void *glp_calloc(int n, int size);
       
   173 /* allocate memory block */
       
   174 
       
   175 #define xfree glp_free
       
   176 void glp_free(void *ptr);
       
   177 /* free memory block */
       
   178 
       
   179 #define xtime glp_time
       
   180 glp_long glp_time(void);
       
   181 /* determine current universal time */
       
   182 
       
   183 #define xdifftime glp_difftime
       
   184 double glp_difftime(glp_long t1, glp_long t0);
       
   185 /* compute difference between two time values, in seconds */
       
   186 
       
   187 #define lib_err_msg _glp_lib_err_msg
       
   188 void lib_err_msg(const char *msg);
       
   189 
       
   190 #define xerrmsg _glp_lib_xerrmsg
       
   191 const char *xerrmsg(void);
       
   192 
       
   193 #define xfopen _glp_lib_xfopen
       
   194 XFILE *xfopen(const char *fname, const char *mode);
       
   195 
       
   196 #define xferror _glp_lib_xferror
       
   197 int xferror(XFILE *file);
       
   198 
       
   199 #define xfeof _glp_lib_xfeof
       
   200 int xfeof(XFILE *file);
       
   201 
       
   202 #define xfgetc _glp_lib_xfgetc
       
   203 int xfgetc(XFILE *file);
       
   204 
       
   205 #define xfputc _glp_lib_xfputc
       
   206 int xfputc(int c, XFILE *file);
       
   207 
       
   208 #define xfflush _glp_lib_xfflush
       
   209 int xfflush(XFILE *fp);
       
   210 
       
   211 #define xfclose _glp_lib_xfclose
       
   212 int xfclose(XFILE *file);
       
   213 
       
   214 #define xfprintf _glp_lib_xfprintf
       
   215 int xfprintf(XFILE *file, const char *fmt, ...);
       
   216 
       
   217 #define xdlopen _glp_xdlopen
       
   218 void *xdlopen(const char *module);
       
   219 
       
   220 #define xdlsym _glp_xdlsym
       
   221 void *xdlsym(void *h, const char *symbol);
       
   222 
       
   223 #define xdlclose _glp_xdlclose
       
   224 void xdlclose(void *h);
       
   225 
       
   226 #endif
       
   227 
       
   228 /* eof */