home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 13 / CDA13.ISO / cdactual / demobin / share / program / C / ACTLIB10.ZIP / TOOLS.ZIP / SETUP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-02  |  3.5 KB  |  137 lines

  1. /*  Copyright (C) 1993   Marc Stern  (internet: stern@mble.philips.be)  */
  2.  
  3. #include <stdarg.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "strings.h"
  7. #include "tools.h"
  8.  
  9.  
  10.  
  11.  
  12. /***
  13.  *
  14.  *  Function   :   getsetupparam
  15.  *
  16.  *  Topics     :   Read paramaters in setup file.
  17.  *
  18.  *  Decisions  :   Expected format is a list of lines of the form
  19.  *
  20.  *                          <keyword>=<value>
  21.  *
  22.  *                 - All letters are treated (and returned) as uppercases.
  23.  *                 - Blanks and tabs are skipped.
  24.  *
  25.  *                 - <value> can be enclosed between double quotes
  26.  *             to preserve lowercases and blanks.
  27.  *
  28.  *            - 2 consecutive double quotes allow to keep
  29.  *                   a double quote in <value>.
  30.  *
  31.  *                 - A number sign (#) in first column forces the line
  32.  *                   to be ignored.
  33.  *
  34.  *
  35.  *  Parameters :    in    FILE *file        input file
  36.  *                  in    char *keyword     keyword to match
  37.  *                  out   char *value       value associated to keyword
  38.  *
  39.  *  Return code:     0     OK
  40.  *                  -1     keyword not found
  41.  *                  -2     file problem
  42.  *
  43.  *  Precond    :   Input file must be opened with read access.
  44.  *
  45.  */
  46.  
  47. static int near getsetupparam( FILE *file, char *keyword, char *value )
  48.  
  49. { char buffer[256], *ptr;
  50.   int length;
  51.  
  52.   if ( fseek(file, 0, SEEK_SET) ) return -2;
  53.  
  54.   while ( fgets(buffer, 255, file) )
  55.     {
  56.       if ( *buffer == '#' ) continue;
  57.  
  58.       strreduce( buffer );
  59.       strreduce( keyword );
  60.  
  61.           length = strlen( keyword );
  62.       if ( strncmp(buffer, keyword, length) ) continue;
  63.       ptr = buffer + length;
  64.           if ( *ptr++ != '=' ) continue;
  65.  
  66.       strcpy( value, ptr );
  67.       return 0;
  68.     }
  69.  
  70.   return -1;
  71.  
  72. }
  73.  
  74.  
  75.  
  76. /***
  77.  *
  78.  *  Function   :   getsetup
  79.  *
  80.  *  Topics     :   Read paramaters in setup file.
  81.  *
  82.  *  Decisions  :   Expected format is a list of lines of the form
  83.  *
  84.  *                          <keyword>=<value>
  85.  *
  86.  *                 - All letters are treated (and returned) as uppercases.
  87.  *                 - Blanks and tabs are skipped.
  88.  *
  89.  *                 - <value> can be enclosed between double quotes
  90.  *             to preserve lowercases and blanks.
  91.  *
  92.  *            - 2 consecutive double quotes allow to keep
  93.  *                   a double quote in <value>.
  94.  *
  95.  *                 - A number sign (#) in first column forces the line
  96.  *                   to be ignored.
  97.  *
  98.  *                 - The input formats in parameter 'format' are C standard
  99.  *                   ones ( %d, %s, %f,...)
  100.  *
  101.  *  Parameters :    in    FILE *file        input file
  102.  *                  in    char *format      "keyword1=format keyword2=format"
  103.  *                  out   pointer list
  104.  *
  105.  *  Return code:     0     OK
  106.  *                  -1     keyword not found
  107.  *                  -2     file problem
  108.  *
  109.  *  Precond    :   Input file must be opened with read access.
  110.  *
  111.  */
  112.  
  113. int getsetup( FILE *file, const char *format, ... )
  114.  
  115. { va_list list;
  116.   int count;
  117.   char buffer[255], fmt[255], *keyword;
  118.   void *ptr;
  119.  
  120.   va_start(list, format);
  121.   strcpy( fmt, format );
  122.   for ( keyword = strtok(fmt, "="); keyword; keyword = strtok(NULL, "=") )
  123.       {
  124.         ptr = va_arg( list, void* );
  125.         count = getsetupparam( file, keyword, buffer );
  126.         if ( count ) return count;
  127.         format = strtok( NULL, " " );
  128.         count = sscanf( buffer, format, ptr );
  129.         if ( count != 1 ) return -1;
  130.       }
  131.  
  132.   va_end( list );
  133.  
  134.   return 0;
  135. }
  136.  
  137.