  parsecfg - եϥ饤֥
  Yuuki NINOMIYA <gm@debian.or.jp>
  $Date: 2002/02/20 13:51:00 $

  ʸ parsecfg 饤֥Υ桼ޥ˥奢ǤȤø
  ˽񤫤ƤΤǡʸ⥵ץץȥ饤֥Υ
  ɤɤ⤷ޤ :-p
  ______________________________________________________________________

  ܼ


  1. Ϥ
     1.1 
     1.2 ħ
     1.3 ɬפʪ

  2. ˡ
     2.1 󥹥ȡ
     2.2 
     2.3 ؿե
     2.4 եν

  3. 饤
  4. ưǧѤ OS
  5. »
  6. ȽƤԶ
  7. ͽ
  8. FAQ
  9. ѼԤؤꤤ
  10. 
  11. ǿ꡼
  12. ǿ
  13. Ϣ
  14. ռ
     14.1 ѥ/饤֥
     14.2 ɤޤϥɥȤδ
     14.3 
     14.4 ¾

  15. С󥢥å


  ______________________________________________________________________

  1.  Ϥ



  1.1.  

  parsecfg ϻꤵ줿եɤ߹ߡƤϤưŪ
  ݤ¸뤿Υ饤֥Ǥ



  1.2.  ħ


  o  ѥ᡼ͤ 1  1 бñե¾ˡ
     Windoze  INI ե (뤤 SAMBA ե) ʥ
     ѤեѲǽ

  o  ֡͡͡ʸ¾ʸʣǼϢꥹȤѲ
     ǽ

  o  ե뤫ǤդͤФ뤳Ȥǽ

  o  ե˽񤭽ФȤǽ

  o  ưŪ˥ݤ뤿ᡢ¤ʤ

  o  gettext ˤåϤιݲбСǤܸ
     ȥݡɸȥե󥹸ΥåѰդƤޤ



  1.3.  ɬפʪ

  parsecfg Ѥˤ ANSI C Υѥ餬ɬפǤưǧ
  gcc version 2.95.4 ǹԤäƤޤ

  ޤɬܤǤϤޤ󤬡ʤΥץ GNU gettext Ѥ
  뤳Ȥ򶯤ᤷޤgettext ˤåϤιݲϡѸ
  Ȥʤ͡ˤȤäˤ꤬ȤǤ gettext ˴ؤ
  ܺ٤ <http://core.ring.gr.jp/pub/doc/gnu-info-j/gettext/gettext-
  ja.html> 򻲾ȤƤ



  2.  ˡ



  2.1.  󥹥ȡ

  parsecfg.c  parsecfg.h 򤢤ʤΥץΰȤƼ
  



  2.2.  

  ե cfgParse ؿǼˤϡcfgStruct ¤Τ
  ɬפޤΤ줾Ǥˤϥѥ᡼̾
  ȤμࡢӼͤϿѿΥɥ쥹 (ե뤬
  INI פξͤϿѿؤΥݥ󥿤Υɥ쥹) 򵭽Ҥ
  

  cfgStruct ¤Τ parsecfg.h ǰʲΤ褦Ƥޤ


  ______________________________________________________________________
  typedef struct{
          char *parameterName;
          cfgValueType type;
          void *value;
  } cfgStruct;
  ______________________________________________________________________



  parameterName ϥѥ᡼ () ̾type ϥѥ᡼
   value ƤϿѿΥɥ쥹 (ޤϥݥ󥿤Υɥ
  ) Ǥ

  type ˤϰʲμबޤ


     CFG_BOOL
        ƤTrueסYesסTסYס1פʤ 1 򡢡False
        NoסFסNס0פʤ 0 Ͽޤʸʸ϶̤
        ޤ


     CFG_INT
        int ƤϿޤ


     CFG_UINT
        unsigned int ƤϿޤ


     CFG_LONG
        long ƤϿޤ


     CFG_ULONG
        unsigned long ƤϿޤ


     CFG_FLOAT
        float ƤϿޤ


     CFG_DOUBLE
        double ƤϿޤ


     CFG_STRING
        ʸƤϿޤ


     CFG_STRING_LIST
        ʣʸϢꥹȤȤƵϿޤ


     CFG_END
        ¤νǤ뤳Ȥ򼨤ޤ


  INT/UINT/LONG/ULONG Ǥϡ0x ǻϤޤʸ 16 ʿȤơ 0 ǻϤ
  ʸ 8 ʿȤưޤ¾ξ 10 ʿȤư
  ޤ

  ܤϥץץ (sample.c) 򸫤Ƥץץ
   make ǥѥǤޤ



  2.3.  ؿե

  δؿѤեǤϺǽ parsecfg.h 򥤥󥯥롼ɤ
  


     void cfgSetFatalFunc(void (*f)(int, const char *, int, const char
        *))
        cfgSetFatalFunc ؿեβϻ˥顼ȯ
        ˸ƤӽФؿꤷޤδؿƤӽФʤäˤ
        parsecfg.c Υ顼ؿȤޤ


     const char *cfgStrError(cfgErrorCode error_code);
        cfgStrError ؿϥ顼ɤʸ֤ޤ顼
        ɤ cfgSetFatalFunc ǻꤹ륨顼ؿ˺ǽΰ
        Ϥޤ

     int cfgParse(const char *file, cfgStruct cfg[], cfgFileType type)
        cfgParse ؿƤӽФȤ file ǻꤵ줿ե뤬
        Ϥ졢ͤ˵Ͽޤ

        type եμǡ CFG_SIMPLE ꤹñ
         1  1 եȤƽޤCFG_INI ꤹ
        Windoze  INI ե (뤤 SAMBA) Υǥ
        ƽޤ

        ֤ͤɤ߹ (1,2,3,...) Ǥtype 
        CFG_SIMPLE ꤷ̾ 0 ֤ޤ⤷顼ȯ
         -1 ֤ޤ


     int cfgDump(const char *file, cfgStruct cfg[], cfgFileType type,
        int max)
        cfgDump ؿե˽񤭽ФؿǤ

        file Ͻ񤭽Фե̾ǡtype եμǤ max
        ˤϥꤷޤtype  CFG_SIMPLE ξϲ
        ꤷƤ⹽ޤ (̾ 0 ꤹǤ礦)


     int fetchVarFromCfgFile(const char *file, char *parameter_name,
        void *result_value, cfgValueType value_type, cfgFileType
        file_type, int section_num, const char *section_name)
        fetchVarFromCfgFile ؿȤȤǡfile ǻꤵ줿ե
        뤫 parameter_name ǻꤵ줿ѥ᡼ͤФ
        ȤǤޤ

        ̤ϥݥ result_value Ǽ줿ɥ쥹˳Ǽޤ
        ѿμ value_type ǻꤷޤ

        file_type եμǤ

        section_num ͤФֹꤷޤ⤷
        줬 0 ʲʤСֹǤϤʤsection_name ǻ
        줿̾Фޤ file_type  CFG_SIMPLE ξ
        ϲꤷƤ⹽ޤ (̾ 0  NULL ꤹǤ
        )

        ͤ˼Ǥ 0 ֤ޤԤ -1 ֤
        


     int cfgSectionNameToNumber(const char *name)
        cfgSectionNameToNumber ؿϥ̾򥻥ֹѴ
        ؿǤ

        ̾˻ꤷ name Ȱפ륻ֹ
        (0,1,2,...)  ֤ޤפ륻󤬤ʤäˤ -1
        ֤ޤʤ̾ʸʸ϶̤ޤ


     char *cfgSectionNumberToName(int num)
        cfgSectionNumberToName ؿϾ cfgSectionNameToNumber ؿ
        ϵդˡֹ椫饻̾ޤ

        ¸ߤʤֹꤹ NULL ֤ޤ


     int cfgAllocForNewSection(cfgStruct cfg[], const char *name)
        cfgAllocForNewSection ؿϿ뤿ɬ
        ʥݤޤ륻̾ˤ name ǻꤵ
        줿̾դޤ

        鸽ߤΥ (1,2,3,...) Ԥ -1 
        ޤ


     int cfgStoreValue(cfgStruct cfg[], const char *parameter, const
        char *value,cfgFileType type,int section)
        cfgStoreValue ؿ value  cfg ˽äѿ˳Ǽޤ
        type եμǤsection ˤͤǼ륻
        ֹ (0,1,2,...) ꤷޤ type  CFG_SIMPLE ξϲ
        ꤷƤ⹽ޤ (̾ 0 ꤹǤ礦)

         0 Ԥ -1 ֤ޤ


     void cfgFree(cfgStruct cfg[], cfgFileType type, int numSections)
        cfgFree ؿ cfgParse ؿˤäƳݤ줿
         2 ʾ cfgParse ؿƤӽФȤϡδؿǤ餫
        ƤƤ type  CFG_SIMPLE ΤȤϤ
        δؿƤӽФƤⲿ⤷ޤ (̤Ǥ)



  2.4.  եν

  ʸ (ڡ) ȥʸϾɤФޤüʸ
  ޤߤϥ֥륯ơ " 󥰥륯ơ '
  ΤϤߤޤ֥륯ơޤߤϥ󥰥륯
  ơǰϤǤդ ok Ǥ

  㡼׵ # θϥȤǧɤФޤ

  ѥ᡼ʸʸ϶̤ޤ󡣴ŪʵҤϡѥ᡼
  򥤥 = ǷΤǤ


  ______________________________________________________________________
  # PARAMETER = VALUE

  ParameterINT    = 65535
  ParameterSTRING = GNU/Linux
  QuotedString    = 'I pronounce "Linux" as "Leenooks".'
  TRUEorFALSE     = FaLsE
  ______________________________________________________________________



  Ʊѥ᡼ʣä硢ͤμब CFG_STRING_LIST ʤ
  ƤϿޤ¾ǤаֺǸ˵Ҥ줿Τͭ
  ʤޤ


  ______________________________________________________________________
  # multiple parameters

  # CFG_INT
  ParameterINT = 255     # ignored
  ParameterINT = 65535   # stored

  # CFG_STRING_LIST
  ListString   = "Debian GNU/Linux" # stored
  ListString   = "FreeBSD"          # stored
  ______________________________________________________________________



  ϢꥹȤʣͤꤷˤϰʲηѤǤޤ


  ______________________________________________________________________
  # for linked list

  ListString = {
          Internet
          "Exploder"
  }
  ______________________________________________________________________



  INI ʥǥξϡƥ̾ [  ] ǰϤߤޤ


  ______________________________________________________________________
  # Windoze INI-like file

  [Linux]
  STRING = rule!
  VALUE  = 99999999

  [Windoze]
  STRING = suck!
  VALUE  = -99999999
  ______________________________________________________________________



  ܤ sample.cfg  sample.ini 򸫤Ƥ



  3.  饤

  Copyright (C) 1999-2001 Yuuki NINOMIYA (Ƿ ʹ) <gm@debian.or.jp>

  ܥץϥե꡼եȥǤʤϡFree Software
  Foundation ɽ GNU ̸ͭѵΥС 2뤤Ϥ
  ʹߤγƥС椫餤줫򤷡ΥС
  ˽äܥץۤޤѹ뤳ȤǤޤ

  ܥץͭѤȤϻפޤۤˤäƤϡԾ
  ŪŬˤĤƤΰۤݾڤޤơʤݾڤԤʤޤ󡣾ܺ
  ˤĤƤ GNU ̸ͭѵɤߤ

  ʤϡܥץȰ GNU ̸ͭѵμ̤ä
  ϤǤǤʤϡFree Software Foundation, Inc., 59
  Temple Place - Suite 330, Boston, MA 02111-1307, USA ؼ񤤤Ƥ
  



  4.  ưǧѤ OS


  o  Debian GNU/Linux 2.1/2.2/sid

  o  SuSE Linux 6.1

  o  FreeSD 3.4-RELEASE



  5.  »


  o  CFG_INI ΥեƱ 2 İʾѡ뤳ȤϤǤޤ
     ϥ̾ΥꥹȤŪ˳ݤƤ뤿Ǥ

  o  CFG_SIMPLE Ǥ cfgFree ؿϻȤޤ (⤷ޤ)



  6.  ȽƤԶ

  äˤޤ



  7.  ͽ

  äˤޤ



  8.  FAQ

  äˤޤ



  9.  ѼԤؤꤤ

  ۡơХݡȡѥåϤĤǤⴿޤޤڤˤ
  



  10.  

  Yuuki NINOMIYA (Ƿ ʹ) <gm@debian.or.jp>
  <http://www.enjoy.ne.jp/~gm/index-ja.html>



  11.  ǿ꡼

  ǿ parsecfg θ꡼ϰʲ URI ɤǤޤ
  <http://www.enjoy.ne.jp/~gm/program/parsecfg/index-ja.html>



  12.  ǿ

  ǿΥɤ Anonymous CVS ǼǤޤݥȥ
  :pserver:anonymous@linuxlovers.yi.org:/var/cvs 򡢥ץ̾
  parsecfg 򡢥ѥɤ anonymous ꤷƤ


  ______________________________________________________________________
  % cvs -d :pserver:anonymous@linuxlovers.yi.org:/var/cvs login
  (Logging in to anonymous@linuxlovers.yi.org)
  CVS password: anonymous
  % cvs -d :pserver:anonymous@linuxlovers.yi.org:/var/cvs checkout parsecfg
  ______________________________________________________________________



  CVS ξܤȤ <http://www-vox.dj.kit.ac.jp/nishi/cvs/cvs-
  manual/cvs-jp_toc.html> 򻲾ȤƤ



  13.  Ϣ

  A Configuration File Parser Using C++ and STL
  <http://members.tripod.com/toddsgreene/cfgstl.html>



  14.  ռ



  14.1.  ѥ/饤֥



  14.2.  ɤޤϥɥȤδ


     Kolb Norbert <nkolb@htl.de>

        o  ޥ PARSECFG_VERSION 


     And. Andruikhanov <andy@euinf.dp.ua>

        o  ե뽪üθФ˼ԤХΥե


     Andreas Schuldei <schuldei@andrive.de>

        o  float ѥ᡼Υݡ


     Pascal Lengard <pascal.lengard@wanadoo.fr>

        o  ǥեȤΥ顼ϥɥ exit ƤФʤ褦


     Guillaume Hajduch <Guillaume.Hajduch@enst-bretagne.fr>

        o  double ѥ᡼Υݡ


     Richard Rowell <rrowell@shreve.net>

        o  C++ ɤȤΥ󥯤򥵥ݡ


     Padraig Brady <padraig@antefacto.com>

        o  cfgStrError ؿ cfgFree ؿ



  14.3.  


     Krzysztof Krzyz.aniak <eloy@transilvania.eu.org>


        o  ݡɸ (pl.po)


     Guillaume Hajduch <guillaume.hajduch@free.fr>

        o  ե󥹸 (fr.po)



  14.4.  ¾

  ȤХݡȡƤäƤ줿͡˴դޤ

  ơparsecfg ȤäƤ뤢ʤˤ꤬Ȥ!



  15.  С󥢥å


     2002/02/20 Ver 3.6.9

        o  ANSI νϤΤ free(NULL) ӽ


     2002/02/14 Ver 3.6.8a

        o  ɥȤθ


     2002/02/13 Ver 3.6.8

        o  ǧǤʤѥ᡼äǤ³Ԥ륳ɤ
           ȥȤ֤ɲ (ͤΤ)
           Thanks to Nemykin, BorisX <borisx.nemykin@intel.com>

        o  ְä򤷤ƤΤ
           Thanks to Gabriele Vedovato
           <Gabriele.Vedovato@lnl.infn.it&gt;

        o  cfgStrError ؿ cfgFree ؿ򿷵ɲá
           Thanks to Padraig Brady <padraig@antefacto.com>


     2001/06/27 Ver 3.6.7

        o  8 ʿ 16 ʿ򥵥ݡȡ
           Thanks to Carlos Nieves Onega <cnieves@tsc.uvigo.es>


     2001/02/22 Ver 3.6.6

        o  C++ ɤȤΥ󥯤򥵥ݡȡ
           Thanks to Richard Rowell <rrowell@shreve.net>


     2001/02/15 Ver 3.6.5

        o  ꡼

        o  å㴳ѹ


     2001/01/16 Ver 3.6.4


        o  static ҤȴƤХե

        o  ΥǥȤ㴳


     2000/12/19 Ver 3.6.3

        o  顼ȯ˥ե륹ȥ꡼ 2 󥯥ƤޤХ
           ե

        o  ˥եɤ߹ߤ˼Ԥ뤳ȤäХե


     2000/12/18 Ver 3.6.2

        o  Ĥδؿΰ const Ҥɲá


     2000/12/15 Ver 3.6.1

        o  ϰϥå򤹤٤ѿְ㤨ƤХե
           Thanks to Elliott Church <echurch@gfs.com>


     2000/12/06 Ver 3.6.0

        o  ưŪ˿ͤɲä뤿δؿ
           ɲá


     2000/11/23 Ver 3.5.0

        o  ե󥹸 (fr.po) źա
           Thanks to Guillaume Hajduch <Guillaume.Hajduch@enst-
           bretagne.fr>

        o  double Υѥ᡼פ򥵥ݡȡ
           Thanks to Guillaume Hajduch <guillaume.hajduch@free.fr>


     2000/10/07 Ver 3.4.0

        o  ٹ ΥСȤϸߴޤ!
           ǥեȥ顼ϥɥεưѹ̿Ū顼ȯ
           饤֥¦ǤϷ褷 exit ʤ褦ˤޤ顼
           ȯ cfgParse  -1 ֤ΤǡƤӽФ¦Ŭڤ
           Ƥ뤤ϼʬǥ顼ϥɥ񤤤ơ
            cfgSetFatalFunc ǥåȤƤ
           Thanks to Pascal Lengard <pascal.lengard@wanadoo.fr>

        o  cfgDump  INI-like ʥǡפȡCFG_STRING_LIST
            CFG_FLOAT դƤХ (break ȴƤ) ե
           

        o  CFG_STRING ʥǡ NULL ΤȤ cfgDump  SEGV Ƥ
           Хե

        o  ɥȤ SGML ˰ܹԡ


     2000/07/20 Ver 3.3.0

        o  ݡɸ (pl.po) źա
           Thanks to Krzysztof Krzyz.aniak <eloy@transilvania.eu.org>


        o  float Υѥ᡼פ򥵥ݡȡ
           Thanks to Andreas Schuldei <schuldei@andrive.de>


     2000/02/24 Ver 3.2.1

        o  parse_values_between_braces() Υ顼νǡfree() 
           ֥å򻲾ȤƤХե

        o  ̤ȤäͤꤷƤݤˡΥѥ᡼̾ǧ
           ʤΤäȤְäԤ顼ȤɽƤ
           Хե


     2000/02/13 Ver 3.2.0

        o  ޥ PARSECFG_VERSION  parsecfg.h ˰ư

        o  եΰֺǸιԤ˲ԥɤʤä硢
           Ƥɤ߹ޤʤäꡢץबå夷ꤹХ
           ե
           Thanks to And. Andruikhanov <andy@euinf.dp.ua>

        o  cfgParse() ǥץ󤷤ե򥯥Ƥʤä
           Хե ()

        o  ̤Ĥ˥եκǸޤɤ߹硢
           顼åФʤХե

        o  ե뤫ǤդѿͤΤߤФؿ
           fetchVarFromCfgFile() ɲá


     1999/12/24 Ver 3.1.2

        o  ˥ѥ᡼ȥå夹Х
           ե


     1999/12/23 Ver 3.1.1

        o  ޥPARSECFG_VERSIONפ褦ˤ
           Thanks to Kolb Norbert <nkolb@htl.de>


     1999/12/22 Ver 3.1.0

        o  ե˽񤭽Фؿ cfgDump() ɲá


     1999/11/30 Ver 3.0.4a

        o  ɥȤ㴳ѹ


     1999/11/07 Ver 3.0.4

        o  顼åʸǻϤ褦ˤ


     1999/10/19 Ver 3.0.3

        o  fgets ѤΥХåեưŪ˳ݤ褦ˤǷᤦ
           ѤǤޤ꡼Ƥ餴


     1999/10/17 Ver 3.0.2

        o  enum  typedef 褦ˤ


     1999/10/11 Ver 3.0.1

        o  INI פեˤơBOOL ͤϻ꤬ʤäȤ
           ˤѿ -1 ǽ褦ˤ

        o  cfgSectionNumberToName ΰοͿȥȰȿ
           򵯤ХեＱʤȤۤϤʤä
           


     1999/10/10 Ver 3.0.0

        o  ˺ľؿեϲȤθߴ
           ޤ

        o  ñʡPARAMETER = VALUEפηʳˡWindoze  INI ե
            (뤤 SAMBA) ʥѤե
           ѤǤ褦ˤ

        o  ѥ᡼ʸʸ̤ʤ褦ˤ

        o  ֡ͤ True/False  Yes/No ʳ T/F  Y/N  1/0
           ѤǤ褦ˤʸʸ϶̤ޤ

        o  ֥륯ơ󤪤ӥ󥰥륯ơǰϤळ
           Ȥˤäƶ䥿ʸǤ褦ˤ

        o  ع¤ΥݡȤö᤿


     1999/09/27 Ver 2.0.3

        o  ɽå㴳ѹ


     1999/08/12 Ver 2.0.2a

        o  ޤƤ̾Τѹ


     1999/08/08 Ver 2.0.2

        o  gettext ν㴳ѹ


     1999/07/01 Ver 2.0.1b

        o  ץץ main ؿ void main(void) 
           Τ int main(void) ѹ


     1999/06/29 Ver 2.0.1a

        o  ɥȤʬ䡣ɤѹϰڤޤ


     1999/06/09 Ver 2.0.1

        o  ¸Τ˳ݤΥ 1 ХȾʤ
           ΤƱߥ򷫤֤Ȥϡ

     1999/06/02 Ver 2.0.0

        o  ̾Τѹ

        o  shhopt 򻲹ͤˤʤǽ餫ľСǤ
           ƤĤѿ˵Ͽ뤿ᡢˤ狼ˤ
           ع¤ޤȤʼѹäˡľ
           ΤǤɤʬ̤ΤĤǤ
           ɬפˤʤޤǤۤä餫ˤʤǽ硣

        o  ΥС󤫤饳ȳʸƤ '#' ˤʤޤ
           ѤäƤޤ̡


     1999/04/03 Ver 1.0.1

        o  ץץǿη׻ְäƤΤ
           

        o  ¸Τ˳ݤΥ 1 ХȾʤ
           Τ


     1999/04/02 Ver 1.0.0

        o  ǽΥСϢꥹȤޤȤʥץǻȤäΤ
           ƤäΤǤʤ֤äƤޤä



