lemon-project-template-glpk
comparison deps/glpk/doc/glpk06.tex @ 9:33de93886c88
Import GLPK 4.47
author | Alpar Juttner <alpar@cs.elte.hu> |
---|---|
date | Sun, 06 Nov 2011 20:59:10 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ead2505bc460 |
---|---|
1 %* glpk06.tex *% | |
2 | |
3 \chapter{Miscellaneous API Routines} | |
4 | |
5 \section{GLPK environment routines} | |
6 | |
7 \subsection{glp\_long---64-bit integer data type} | |
8 | |
9 Some GLPK API routines use 64-bit integer data type, which is declared | |
10 in the header \verb|glpk.h| as follows: | |
11 | |
12 \begin{verbatim} | |
13 typedef struct { int lo, hi; } glp_long; | |
14 \end{verbatim} | |
15 | |
16 \noindent | |
17 where \verb|lo| contains low 32 bits, and \verb|hi| contains high 32 | |
18 bits of 64-bit integer value.\footnote{GLPK conforms to ILP32, LLP64, | |
19 and LP64 programming models, where the built-in type {\tt int} | |
20 corresponds to 32-bit integers.} | |
21 | |
22 \subsection{glp\_init\_env---initialize GLPK environment} | |
23 | |
24 \subsubsection*{Synopsis} | |
25 | |
26 \begin{verbatim} | |
27 int glp_init_env(void); | |
28 \end{verbatim} | |
29 | |
30 \subsubsection*{Description} | |
31 | |
32 The routine \verb|glp_init_env| initializes the GLPK environment. | |
33 Normally the application program does not need to call this routine, | |
34 because it is called automatically on the first call to any API routine. | |
35 | |
36 \newpage | |
37 | |
38 \subsubsection*{Returns} | |
39 | |
40 The routine \verb|glp_init_env| returns one of the following codes: | |
41 | |
42 \noindent | |
43 0 --- initialization successful; | |
44 | |
45 \noindent | |
46 1 --- environment is already initialized; | |
47 | |
48 \noindent | |
49 2 --- initialization failed (insufficient memory); | |
50 | |
51 \noindent | |
52 3 --- initialization failed (unsupported programming model). | |
53 | |
54 \subsection{glp\_version---determine library version} | |
55 | |
56 \subsubsection*{Synopsis} | |
57 | |
58 \begin{verbatim} | |
59 const char *glp_version(void); | |
60 \end{verbatim} | |
61 | |
62 \subsubsection*{Returns} | |
63 | |
64 The routine \verb|glp_version| returns a pointer to a null-terminated | |
65 character string, which specifies the version of the GLPK library in | |
66 the form \verb|"X.Y"|, where `\verb|X|' is the major version number, and | |
67 `\verb|Y|' is the minor version number, for example, \verb|"4.16"|. | |
68 | |
69 \subsubsection*{Example} | |
70 | |
71 \begin{footnotesize} | |
72 \begin{verbatim} | |
73 printf("GLPK version is %s\n", glp_version()); | |
74 \end{verbatim} | |
75 \end{footnotesize} | |
76 | |
77 \subsection{glp\_free\_env---free GLPK environment} | |
78 | |
79 \subsubsection*{Synopsis} | |
80 | |
81 \begin{verbatim} | |
82 int glp_free_env(void); | |
83 \end{verbatim} | |
84 | |
85 \subsubsection*{Description} | |
86 | |
87 The routine \verb|glp_free_env| frees all resources used by GLPK | |
88 routines (memory blocks, etc.) which are currently still in use. | |
89 | |
90 Normally the application program does not need to call this routine, | |
91 because GLPK routines always free all unused resources. However, if | |
92 the application program even has deleted all problem objects, there | |
93 will be several memory blocks still allocated for the internal library | |
94 needs. For some reasons the application program may want GLPK to free | |
95 this memory, in which case it should call \verb|glp_free_env|. | |
96 | |
97 Note that a call to \verb|glp_free_env| invalidates all problem objects | |
98 which still exist. | |
99 | |
100 \subsubsection*{Returns} | |
101 | |
102 The routine \verb|glp_free_env| returns one of the following codes: | |
103 | |
104 \noindent | |
105 0 --- termination successful; | |
106 | |
107 \noindent | |
108 1 --- environment is inactive (was not initialized). | |
109 | |
110 \subsection{glp\_printf---write formatted output to terminal} | |
111 | |
112 \subsubsection*{Synopsis} | |
113 | |
114 \begin{verbatim} | |
115 void glp_printf(const char *fmt, ...); | |
116 \end{verbatim} | |
117 | |
118 \subsubsection*{Description} | |
119 | |
120 The routine \verb|glp_printf| uses the format control string | |
121 \verb|fmt| to format its parameters and writes the formatted output to | |
122 the terminal. | |
123 | |
124 This routine is a replacement of the standard C function | |
125 \verb|printf| and used by all GLPK routines to perform terminal | |
126 output. The application program may use \verb|glp_printf| for the same | |
127 purpose that allows controlling its terminal output with the routines | |
128 \verb|glp_term_out| and \verb|glp_term_hook|. | |
129 | |
130 \subsection{glp\_vprintf---write formatted output to terminal} | |
131 | |
132 \subsubsection*{Synopsis} | |
133 | |
134 \begin{verbatim} | |
135 void glp_vprintf(const char *fmt, va_list arg); | |
136 \end{verbatim} | |
137 | |
138 \subsubsection*{Description} | |
139 | |
140 The routine \verb|glp_vprintf| uses the format control string | |
141 \verb|fmt| to format its parameters specified by the list \verb|arg| | |
142 and writes the formatted output to the terminal. | |
143 | |
144 This routine is a replacement of the standard C function | |
145 \verb|vprintf| and used by all GLPK routines to perform terminal | |
146 output. The application program may use \verb|glp_vprintf| for the same | |
147 purpose that allows controlling its terminal output with the routines | |
148 \verb|glp_term_out| and \verb|glp_term_hook|. | |
149 | |
150 \newpage | |
151 | |
152 \subsection{glp\_term\_out---enable/disable terminal output} | |
153 | |
154 \subsubsection*{Synopsis} | |
155 | |
156 \begin{verbatim} | |
157 int glp_term_out(int flag); | |
158 \end{verbatim} | |
159 | |
160 \subsubsection*{Description} | |
161 | |
162 Depending on the parameter flag the routine \verb|glp_term_out| enables | |
163 or disables terminal output performed by glpk routines: | |
164 | |
165 \verb|GLP_ON | --- enable terminal output; | |
166 | |
167 \verb|GLP_OFF| --- disable terminal output. | |
168 | |
169 \subsubsection*{Returns} | |
170 | |
171 The routine \verb|glp_term_out| returns the previous value of the | |
172 terminal output flag (\verb|GLP_ON| or \verb|GLP_OFF|). | |
173 | |
174 \subsection{glp\_term\_hook---intercept terminal output} | |
175 | |
176 \subsubsection*{Synopsis} | |
177 | |
178 \begin{verbatim} | |
179 void glp_term_hook(int (*func)(void *info, const char *s), | |
180 void *info); | |
181 \end{verbatim} | |
182 | |
183 \subsubsection*{Description} | |
184 | |
185 The routine \verb|glp_term_hook| installs the user-defined hook routine | |
186 to intercept all terminal output performed by GLPK routines. | |
187 | |
188 %This feature can be used to redirect the terminal output to other | |
189 %destination, for example, to a file or a text window. | |
190 | |
191 The parameter {\it func} specifies the user-defined hook routine. It is | |
192 called from an internal printing routine, which passes to it two | |
193 parameters: {\it info} and {\it s}. The parameter {\it info} is a | |
194 transit pointer specified in corresponding call to the routine | |
195 \verb|glp_term_hook|; it may be used to pass some additional information | |
196 to the hook routine. The parameter {\it s} is a pointer to the null | |
197 terminated character string, which is intended to be written to the | |
198 terminal. If the hook routine returns zero, the printing routine writes | |
199 the string {\it s} to the terminal in a usual way; otherwise, if the | |
200 hook routine returns non-zero, no terminal output is performed. | |
201 | |
202 To uninstall the hook routine both parameters {\it func} and {\it info} | |
203 should be specified as \verb|NULL|. | |
204 | |
205 \newpage | |
206 | |
207 \subsubsection*{Example} | |
208 | |
209 \begin{footnotesize} | |
210 \begin{verbatim} | |
211 static int hook(void *info, const char *s) | |
212 { FILE *foo = info; | |
213 fputs(s, foo); | |
214 return 1; | |
215 } | |
216 | |
217 int main(void) | |
218 { FILE *foo; | |
219 . . . | |
220 /* redirect terminal output */ | |
221 glp_term_hook(hook, foo); | |
222 . . . | |
223 /* resume terminal output */ | |
224 glp_term_hook(NULL, NULL); | |
225 . . . | |
226 } | |
227 \end{verbatim} | |
228 \end{footnotesize} | |
229 | |
230 \subsection{glp\_open\_tee---start copying terminal output} | |
231 | |
232 \subsubsection*{Synopsis} | |
233 | |
234 \begin{verbatim} | |
235 int glp_open_tee(const char *fname); | |
236 \end{verbatim} | |
237 | |
238 \subsubsection*{Description} | |
239 | |
240 The routine \verb|glp_open_tee| starts copying all the terminal output | |
241 to an output text file, whose name is specified by the character string | |
242 \verb|fname|. | |
243 | |
244 \subsubsection*{Returns} | |
245 | |
246 The routine \verb|glp_open_tee| returns one of the following codes: | |
247 | |
248 \noindent | |
249 0 --- operation successful; | |
250 | |
251 \noindent | |
252 1 --- copying terminal output is already active; | |
253 | |
254 \noindent | |
255 2 --- unable to create output file. | |
256 | |
257 \newpage | |
258 | |
259 \subsection{glp\_close\_tee---stop copying terminal output} | |
260 | |
261 \subsubsection*{Synopsis} | |
262 | |
263 \begin{verbatim} | |
264 int glp_close_tee(void); | |
265 \end{verbatim} | |
266 | |
267 \subsubsection*{Description} | |
268 | |
269 The routine \verb|glp_close_tee| stops copying the terminal output to | |
270 the output text file previously open by the routine \verb|glp_open_tee| | |
271 closing that file. | |
272 | |
273 \subsubsection*{Returns} | |
274 | |
275 The routine \verb|glp_close_tee| returns one of the following codes: | |
276 | |
277 \noindent | |
278 0 --- operation successful; | |
279 | |
280 \noindent | |
281 1 --- copying terminal output was not started. | |
282 | |
283 \subsection{glp\_error---display error message and terminate execution} | |
284 | |
285 \subsubsection*{Synopsis} | |
286 | |
287 \begin{verbatim} | |
288 void glp_error(const char *fmt, ...); | |
289 \end{verbatim} | |
290 | |
291 \subsubsection*{Description} | |
292 | |
293 The routine \verb|glp_error| (implemented as a macro) formats its | |
294 parameters using the format control string \verb|fmt|, writes the | |
295 formatted message to the terminal, and then abnormally terminates the | |
296 program. | |
297 | |
298 \subsection{glp\_assert---check logical condition} | |
299 | |
300 \subsubsection*{Synopsis} | |
301 | |
302 \begin{verbatim} | |
303 void glp_assert(int expr); | |
304 \end{verbatim} | |
305 | |
306 \subsubsection*{Description} | |
307 | |
308 The routine \verb|glp_assert| (implemented as a macro) checks | |
309 a logical condition specified by the expression \verb|expr|. If the | |
310 condition is true (non-zero), the routine does nothing; otherwise, if | |
311 the condition is false (zero), the routine prints an error message and | |
312 abnormally terminates the program. | |
313 | |
314 This routine is a replacement of the standard C function \verb|assert| | |
315 and used by all GLPK routines to check program logic. The application | |
316 program may use \verb|glp_assert| for the same purpose. | |
317 | |
318 \subsection{glp\_error\_hook---install hook to intercept abnormal | |
319 termination} | |
320 | |
321 \subsubsection*{Synopsis} | |
322 | |
323 \begin{verbatim} | |
324 void glp_error_hook(void (*func)(void *info), void *info); | |
325 \end{verbatim} | |
326 | |
327 \subsubsection*{Description} | |
328 | |
329 The routine \verb|glp_error_hook| installs a user-defined hook routine | |
330 to intercept abnormal termination. | |
331 | |
332 The parameter \verb|func| specifies the user-defined hook routine. It | |
333 is called from the routine \verb|glp_error| before the latter calls the | |
334 abort function to abnormally terminate the application program because | |
335 of fatal error. The parameter \verb|info| is a transit pointer, | |
336 specified in the corresponding call to the routine | |
337 \verb|glp_error_hook|; it may be used to pass some information to the | |
338 hook routine. | |
339 | |
340 To uninstall the hook routine the parameters \verb|func| and \verb|info| | |
341 should be specified as \verb|NULL|. | |
342 | |
343 \subsubsection*{Usage note} | |
344 | |
345 If the hook routine returns, the application program is abnormally | |
346 terminated. To prevent abnormal termnation the hook routine may perform | |
347 a global jump using the standard function \verb|longjmp|, in which case | |
348 the application program {\it must} call the routine \verb|glp_free_env|. | |
349 | |
350 \subsection{glp\_malloc---allocate memory block} | |
351 | |
352 \subsubsection*{Synopsis} | |
353 | |
354 \begin{verbatim} | |
355 void *glp_malloc(int size); | |
356 \end{verbatim} | |
357 | |
358 \subsubsection*{Description} | |
359 | |
360 The routine \verb|glp_malloc| dynamically allocates a memory block of | |
361 \verb|size| bytes long. Should note that: | |
362 | |
363 1) the parameter \verb|size| must be positive; | |
364 | |
365 2) being allocated the memory block contains arbitrary data, that is, | |
366 it is {\it not} initialized by binary zeros; | |
367 | |
368 3) if the block cannot be allocated due to insufficient memory, the | |
369 routine prints an error message and abnormally terminates the program. | |
370 | |
371 This routine is a replacement of the standard C function \verb|malloc| | |
372 and used by all GLPK routines for dynamic memory allocation. The | |
373 application program may use \verb|glp_malloc| for the same purpose. | |
374 | |
375 \subsubsection*{Returns} | |
376 | |
377 The routine \verb|glp_malloc| returns a pointer to the memory block | |
378 allocated. To free this block the routine \verb|glp_free| (not the | |
379 standard C function \verb|free|!) must be used. | |
380 | |
381 \subsection{glp\_calloc---allocate memory block} | |
382 | |
383 \subsubsection*{Synopsis} | |
384 | |
385 \begin{verbatim} | |
386 void *glp_calloc(int n, int size); | |
387 \end{verbatim} | |
388 | |
389 \subsubsection*{Description} | |
390 | |
391 The routine \verb|glp_calloc| dynamically allocates a memory block of | |
392 \verb|n|$\times$\verb|size| bytes long. Should note that: | |
393 | |
394 1) both parameters \verb|n| and \verb|size| must be positive; | |
395 | |
396 2) being allocated the memory block contains arbitrary data, that is, | |
397 it is {\it not} initialized by binary zeros; | |
398 | |
399 3) if the block cannot be allocated due to insufficient memory, the | |
400 routine prints an error message and abnormally terminates the program. | |
401 | |
402 This routine is a replacement of the standard C function \verb|calloc| | |
403 (with exception that the block is not cleaned) and used by all GLPK | |
404 routines for dynamic memory allocation. The application program may use | |
405 \verb|glp_calloc| for the same purpose. | |
406 | |
407 \subsubsection*{Returns} | |
408 | |
409 The routine \verb|glp_calloc| returns a pointer to the memory block | |
410 allocated. To free this block the routine \verb|glp_free| (not the | |
411 standard C function \verb|free|!) must be used. | |
412 | |
413 \subsection{glp\_free---free memory block} | |
414 | |
415 \subsubsection*{Synopsis} | |
416 | |
417 \begin{verbatim} | |
418 void glp_free(void *ptr); | |
419 \end{verbatim} | |
420 | |
421 \subsubsection*{Description} | |
422 | |
423 The routine \verb|glp_free| frees (deallocates) a memory block pointed | |
424 to by \verb|ptr|, which was previously allocated by the routine | |
425 \verb|glp_malloc| or \verb|glp_calloc|. Note that the pointer \verb|ptr| | |
426 must valid and must not be \verb|NULL|. | |
427 | |
428 This routine is a replacement of the standard C function \verb|free| | |
429 and used by all GLPK routines for dynamic memory allocation. The | |
430 application program may use \verb|glp_free| for the same purpose. | |
431 | |
432 \subsection{glp\_mem\_usage---get memory usage information} | |
433 | |
434 \subsubsection*{Synopsis} | |
435 | |
436 \begin{verbatim} | |
437 void glp_mem_usage(int *count, int *cpeak, glp_long *total, | |
438 glp_long *tpeak); | |
439 \end{verbatim} | |
440 | |
441 \subsubsection*{Description} | |
442 | |
443 The routine \verb|glp_mem_usage| reports some information about | |
444 utilization of the memory by the routines \verb|glp_malloc|, | |
445 \verb|glp_calloc|, and \verb|glp_free|. Information is stored to | |
446 locations specified by corresponding parameters (see below). Any | |
447 parameter can be specified as \verb|NULL|, in which case corresponding | |
448 information is not stored. | |
449 | |
450 \verb|*count| is the number of currently allocated memory blocks. | |
451 | |
452 \verb|*cpeak| is the peak value of \verb|*count| reached since the | |
453 initialization of the GLPK library environment. | |
454 | |
455 \verb|*total| is the total amount, in bytes, of currently allocated | |
456 memory blocks. | |
457 | |
458 \verb|*tpeak| is the peak value of \verb|*total| reached since the | |
459 initialization of the GLPK library envirionment. | |
460 | |
461 \subsubsection*{Example} | |
462 | |
463 \begin{footnotesize} | |
464 \begin{verbatim} | |
465 glp_mem_usage(&count, NULL, NULL, NULL); | |
466 printf("%d memory block(s) are still allocated\n", count); | |
467 \end{verbatim} | |
468 \end{footnotesize} | |
469 | |
470 \subsection{glp\_mem\_limit---set memory usage limit} | |
471 | |
472 \subsubsection*{Synopsis} | |
473 | |
474 \begin{verbatim} | |
475 void glp_mem_limit(int limit); | |
476 \end{verbatim} | |
477 | |
478 \subsubsection*{Description} | |
479 | |
480 The routine \verb|glp_mem_limit| limits the amount of memory available | |
481 for dynamic allocation (with the routines \verb|glp_malloc| and | |
482 \verb|glp_calloc|) to \verb|limit| megabytes. | |
483 | |
484 \subsection{glp\_time---determine current universal time} | |
485 | |
486 \subsubsection*{Synopsis} | |
487 | |
488 \begin{verbatim} | |
489 glp_long glp_time(void); | |
490 \end{verbatim} | |
491 | |
492 \subsection*{Returns} | |
493 | |
494 The routine \verb|glp_time| returns the current universal time (UTC), | |
495 in milliseconds, elapsed since 00:00:00 GMT January 1, 1970. | |
496 | |
497 \subsection{glp\_difftime---compute difference between two time values} | |
498 | |
499 \subsubsection*{Synopsis} | |
500 | |
501 \begin{verbatim} | |
502 double glp_difftime(glp_long t1, glp_long t0); | |
503 \end{verbatim} | |
504 | |
505 \subsection*{Returns} | |
506 | |
507 The routine \verb|glp_difftime| returns the difference between two time | |
508 values \verb|t1| and \verb|t0|, expressed in seconds. | |
509 | |
510 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
511 | |
512 \newpage | |
513 | |
514 \section{Plain data file reading routines} | |
515 | |
516 \subsection{Introduction} | |
517 | |
518 On developing simple applications to solve optimization problems it is | |
519 often needed to read data from plain text files. To do this the standard | |
520 C function \verb|fscanf| may be used, however, it is not convenient; for | |
521 example, if it scans an integer number according to the format | |
522 specification `\verb|%d|', and that number is coded incorrectly, | |
523 no diagnostics is provided. | |
524 | |
525 This section describes a set of GLPK API routines, which may be used in | |
526 application programs to simplify reading data from plain text files. | |
527 | |
528 \subsubsection*{Example 1} | |
529 | |
530 The following main program reads ten integer numbers from plain text | |
531 file \verb|data.txt| and prints their sum. | |
532 | |
533 \begin{footnotesize} | |
534 \begin{verbatim} | |
535 /* sdfsamp1.c */ | |
536 | |
537 #include <stdio.h> | |
538 #include <stdlib.h> | |
539 #include <glpk.h> | |
540 | |
541 int main(void) | |
542 { glp_data *data; | |
543 int j, num, sum; | |
544 /* open plain data file */ | |
545 data = glp_sdf_open_file("data.txt"); | |
546 if (data == NULL) exit(EXIT_FAILURE); | |
547 sum = 0; | |
548 for (j = 1; j <= 10; j++) | |
549 { /* read next integer number */ | |
550 num = glp_sdf_read_int(data); | |
551 sum += num; | |
552 } | |
553 printf("sum = %d\n", sum); | |
554 /* close plain data file */ | |
555 glp_sdf_close_file(data); | |
556 return 0; | |
557 } | |
558 | |
559 /* eof */ | |
560 \end{verbatim} | |
561 \end{footnotesize} | |
562 | |
563 The input data are coded in free format. For example, the file | |
564 \verb|data.txt| may look like this: | |
565 | |
566 \begin{footnotesize} | |
567 \begin{verbatim} | |
568 123 65 432 890 -12 743 895 -7 111 326 | |
569 \end{verbatim} | |
570 \end{footnotesize} | |
571 | |
572 \noindent | |
573 or like this: | |
574 | |
575 \begin{footnotesize} | |
576 \begin{verbatim} | |
577 123 65 432 890 -12 | |
578 743 895 -7 111 326 | |
579 \end{verbatim} | |
580 \end{footnotesize} | |
581 | |
582 \noindent | |
583 If the input data file contains incorrect data, the routine | |
584 \verb|glp_sdf_read_int| prints an error message and, if no error | |
585 handling is provided by the application program, abnormally terminates | |
586 program execution. For example, the file \verb|data.txt| could contain | |
587 the following data: | |
588 | |
589 \begin{footnotesize} | |
590 \begin{verbatim} | |
591 123 65 432 890 -12 | |
592 743 895 =7 111 326 | |
593 \end{verbatim} | |
594 \end{footnotesize} | |
595 | |
596 \noindent | |
597 in which case the error message would be the following: | |
598 | |
599 \begin{footnotesize} | |
600 \begin{verbatim} | |
601 data.txt:2: cannot convert `=7' to integer | |
602 \end{verbatim} | |
603 \end{footnotesize} | |
604 | |
605 \subsubsection*{Example 2} | |
606 | |
607 As it was said above, by default any attempt to read incorrect data | |
608 leads to abnormal termination. However, sometimes it is desirable to | |
609 catch such errors. This feature is illustrated by the following main | |
610 program, which does the same job as in the previous example. | |
611 | |
612 \begin{footnotesize} | |
613 \begin{verbatim} | |
614 /* sdfsamp2.c */ | |
615 | |
616 #include <setjmp.h> | |
617 #include <stdio.h> | |
618 #include <stdlib.h> | |
619 #include <glpk.h> | |
620 | |
621 int main(void) | |
622 { glp_data *data; | |
623 jmp_buf jump; | |
624 int j, num, sum, ret; | |
625 /* open plain data file */ | |
626 data = glp_sdf_open_file("data.txt"); | |
627 if (data == NULL) | |
628 { ret = EXIT_FAILURE; | |
629 goto done; | |
630 } | |
631 /* set up error handling */ | |
632 if (setjmp(jump)) | |
633 { ret = EXIT_FAILURE; | |
634 goto done; | |
635 } | |
636 glp_sdf_set_jump(data, jump); | |
637 /* read and process data */ | |
638 sum = 0; | |
639 for (j = 1; j <= 10; j++) | |
640 { /* read next integer number */ | |
641 num = glp_sdf_read_int(data); | |
642 if (abs(num) > 1000) | |
643 glp_sdf_error(data, "integer %d too big\n", num); | |
644 if (num < 0) | |
645 glp_sdf_warning(data, "integer %d is negative\n", num); | |
646 sum += num; | |
647 } | |
648 printf("sum = %d\n", sum); | |
649 ret = EXIT_SUCCESS; | |
650 done: /* close plain data file */ | |
651 if (data != NULL) glp_sdf_close_file(data); | |
652 return ret; | |
653 } | |
654 | |
655 /* eof */ | |
656 \end{verbatim} | |
657 \end{footnotesize} | |
658 | |
659 \subsection{glp\_sdf\_open\_file---open plain data file} | |
660 | |
661 \subsubsection*{Synopsis} | |
662 | |
663 \begin{verbatim} | |
664 glp_data *glp_sdf_open_file(const char *fname); | |
665 \end{verbatim} | |
666 | |
667 \subsubsection*{Description} | |
668 | |
669 The routine \verb|glp_sdf_open_file| opens a plain data file, whose | |
670 name is specified by the character string \verb|fname|. | |
671 | |
672 \subsubsection*{Returns} | |
673 | |
674 If the operation was successful, the routine \verb|glp_sdf_open_file| | |
675 returns a pointer to the opaque program object of the type | |
676 \verb|glp_data|\footnote{This data structure is declared in the header | |
677 file {\tt glpk.h}.} associated with the plain data file. Otherwise, if | |
678 the operation failed, the routine prints an error message and returns | |
679 \verb|NULL|. | |
680 | |
681 \subsubsection*{Note} | |
682 | |
683 The application program should use the pointer returned by the routine | |
684 \verb|glp_sdf_open_file| to perform all subsequent operations on the | |
685 data file. | |
686 | |
687 \newpage | |
688 | |
689 \subsection{glp\_sdf\_set\_jump---set up error handling} | |
690 | |
691 \subsubsection*{Synopsis} | |
692 | |
693 \begin{verbatim} | |
694 void glp_sdf_set_jump(glp_data *data, jmp_buf jump); | |
695 \end{verbatim} | |
696 | |
697 \subsubsection*{Description} | |
698 | |
699 The routine \verb|glp_sdf_set_jump| sets up error handling for the | |
700 plain data file specified by the parameter \verb|data|. | |
701 | |
702 The parameter \verb|jump| specifies the environment buffer, which must | |
703 be initialized with the standard C function \verb|setjmp| prior to call | |
704 to the routine \verb|glp_sdf_set_jump|. Detecting any incorrect data in | |
705 the corresponding plain data file will cause non-local ``go to'' by | |
706 a call to the standard C function \verb|longjmp|. | |
707 | |
708 The parameter \verb|jump| can be specified as \verb|NULL|, in which | |
709 case the routine \verb|glp_sdf_set_jump| restores the default behavior, | |
710 in which case detecting incorrect data leads to abnormal termination. | |
711 | |
712 \subsection{glp\_sdf\_error---print error message} | |
713 | |
714 \subsubsection*{Synopsis} | |
715 | |
716 \begin{verbatim} | |
717 void glp_sdf_error(glp_data *data, const char *fmt, ...); | |
718 \end{verbatim} | |
719 | |
720 \subsubsection*{Description} | |
721 | |
722 The routine \verb|glp_sdf_error| prints an error message related to the | |
723 plain data file specified by the parameter \verb|data|. If error handing | |
724 was not previously provided, the routine then abnormally terminates | |
725 execution of the application program. Otherwise, it signals about the | |
726 error by a call to the standard C function \verb|longjmp|. | |
727 | |
728 The character string \verb|fmt| and optional parameters following it | |
729 have the same meaning as for the standard C function \verb|printf|. | |
730 | |
731 The message produced by the routine \verb|glp_sdf_error| looks like | |
732 follows: | |
733 | |
734 \medskip | |
735 | |
736 {\it file}{\tt :}{\it line}{\tt :} {\it message text} | |
737 | |
738 \medskip | |
739 | |
740 \noindent | |
741 where {\it file} is the filename passed to the routine | |
742 \verb|glp_sdf_open| and {\it line} is the current line number. | |
743 | |
744 \newpage | |
745 | |
746 \subsection{glp\_sdf\_warning---print warning message} | |
747 | |
748 \subsubsection*{Synopsis} | |
749 | |
750 \begin{verbatim} | |
751 void glp_sdf_warning(glp_data *data, const char *fmt, ...); | |
752 \end{verbatim} | |
753 | |
754 \subsubsection*{Description} | |
755 | |
756 The routine \verb|glp_sdf_warning| prints a warning message related to | |
757 the plain data file specified by the parameter \verb|data|. | |
758 | |
759 The character string \verb|fmt| and optional parameters following it | |
760 have the same meaning as for the standard C function \verb|printf|. | |
761 | |
762 The message produced by the routine \verb|glp_sdf_warning| looks like | |
763 follows: | |
764 | |
765 \medskip | |
766 | |
767 {\it file}{\tt :}{\it line}\verb|: warning:| {\it message text} | |
768 | |
769 \medskip | |
770 | |
771 \noindent | |
772 where {\it file} is the filename passed to the routine | |
773 \verb|glp_sdf_open| and {\it line} is the current line number. | |
774 | |
775 \subsection{glp\_sdf\_read\_int---read integer number} | |
776 | |
777 \subsubsection*{Synopsis} | |
778 | |
779 \begin{verbatim} | |
780 int glp_sdf_read_int(glp_data *data); | |
781 \end{verbatim} | |
782 | |
783 \subsubsection*{Description} | |
784 | |
785 The routine \verb|glp_sdf_read_int| skips optional white-space | |
786 characters and then reads an integer number from the plain data file | |
787 specified by the parameter \verb|data|. If the operation failed, the | |
788 routine \verb|glp_sdf_read_int| calls the routine \verb|glp_sdf_error| | |
789 (see above). | |
790 | |
791 \subsubsection*{Returns} | |
792 | |
793 The routine \verb|glp_sdf_read_int| returns the integer number read. | |
794 | |
795 \newpage | |
796 | |
797 \subsection{glp\_sdf\_read\_num---read floating-point number} | |
798 | |
799 \subsubsection*{Synopsis} | |
800 | |
801 \begin{verbatim} | |
802 double glp_sdf_read_num(glp_data *data); | |
803 \end{verbatim} | |
804 | |
805 \subsubsection*{Description} | |
806 | |
807 The routine \verb|glp_sdf_read_num| skips optional white-space | |
808 characters and then reads a floating-point number from the plain data | |
809 file specified by the parameter \verb|data|. If the operation failed, | |
810 the routine \verb|glp_sdf_num| calls the routine \verb|glp_sdf_error| | |
811 (see above). | |
812 | |
813 \subsubsection*{Returns} | |
814 | |
815 The routine \verb|glp_sdf_read_num| returns the floating-point number | |
816 read. | |
817 | |
818 \subsection{glp\_sdf\_read\_item---read data item} | |
819 | |
820 \subsubsection*{Synopsis} | |
821 | |
822 \begin{verbatim} | |
823 const char *glp_sdf_read_item(glp_data *data); | |
824 \end{verbatim} | |
825 | |
826 \subsubsection*{Description} | |
827 | |
828 The routine \verb|glp_sdf_read_item| skips optional white-space | |
829 characters and then reads a data item from the plain data file specified | |
830 by the parameter \verb|data|. If the operation failed, the routine | |
831 \verb|glp_sdf_read_item| calls the routine \verb|glp_sdf_error| (see | |
832 above). | |
833 | |
834 {\it Data item} is a sequence of 1 to 255 arbitrary graphic characters | |
835 delimited by white-space characters. Data items may be used to represent | |
836 symbolic names, identifiers, etc. | |
837 | |
838 \subsubsection*{Returns} | |
839 | |
840 The routine \verb|glp_sdf_read_item| returns a pointer to the internal | |
841 buffer, which contains the data item read in the form of a | |
842 null-terminated character string. | |
843 | |
844 \newpage | |
845 | |
846 \subsection{glp\_sdf\_read\_text---read text until end of line} | |
847 | |
848 \subsubsection*{Synopsis} | |
849 | |
850 \begin{verbatim} | |
851 const char *glp_sdf_read_text(glp_data *data); | |
852 \end{verbatim} | |
853 | |
854 \subsubsection*{Description} | |
855 | |
856 The routine \verb|glp_sdf_read_text| reads a text from the plain data | |
857 file specified by the parameter \verb|data|. | |
858 | |
859 Reading starts from the current position and extends until end of the | |
860 current line. Initial and trailing white-space characters as well as | |
861 the newline character are not included in the text. | |
862 | |
863 \subsubsection*{Returns} | |
864 | |
865 The routine \verb|glp_sdf_read_text| returns a pointer to the internal | |
866 buffer, which contains the text read in the form of a null-terminated | |
867 character string. | |
868 | |
869 \subsection{glp\_sdf\_line---determine current line number} | |
870 | |
871 \subsubsection*{Synopsis} | |
872 | |
873 \begin{verbatim} | |
874 int glp_sdf_line(glp_data *data); | |
875 \end{verbatim} | |
876 | |
877 \subsubsection*{Returns} | |
878 | |
879 The routine \verb|glp_sdf_line| returns the current line number for the | |
880 plain data file specified by the parameter \verb|data|. | |
881 | |
882 \subsection{glp\_sdf\_close\_file---close plain data file} | |
883 | |
884 \subsubsection*{Synopsis} | |
885 | |
886 \begin{verbatim} | |
887 void glp_sdf_close_file(glp_data *data); | |
888 \end{verbatim} | |
889 | |
890 \subsubsection*{Description} | |
891 | |
892 The routine \verb|glp_sdf_close_file| closes the plain data file | |
893 specified by the parameter \verb|data| and frees all the resources | |
894 allocated to this program object. | |
895 | |
896 %* eof *% |