doc/glpk06.tex
author Alpar Juttner <alpar@cs.elte.hu>
Sun, 05 Dec 2010 17:35:23 +0100
changeset 2 4c8956a7bdf4
permissions -rw-r--r--
Set up CMAKE build environment
     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 *%