|
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 */ |