Annotation of embedaddon/confuse/examples/wincfgtest.c, revision 1.1.1.1

1.1       misho       1: /* Simple Windows program that calls LoadLibrary to load the libConfuse DLL
                      2:  * into memory.
                      3:  */
                      4: 
                      5: #include <stdio.h>
                      6: #include <stdlib.h>
                      7: #include <windows.h>
                      8: 
                      9: #include "confuse.h"
                     10: 
                     11: #ifdef __BORLANDC__
                     12: # define DLLSYM(sym) "_" ## sym /* duh! */
                     13: #else
                     14: # define DLLSYM(sym) sym
                     15: #endif
                     16: 
                     17: int cb_message(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)
                     18: {
                     19:     if(argc != 1)
                     20:         MessageBox(0, "message() requires only 1 argument", "message() function", MB_OK);
                     21:     else
                     22:         MessageBox(0, argv[0], "message() function", MB_OK);
                     23:     return 0;
                     24: }
                     25: 
                     26: static void display_last_error(void)
                     27: {
                     28:     LPVOID lpMsgBuf;
                     29:     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                     30:                                  FORMAT_MESSAGE_FROM_SYSTEM |
                     31:                                  FORMAT_MESSAGE_IGNORE_INSERTS,
                     32:                                  NULL,
                     33:                                  GetLastError(),
                     34:                                  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
                     35:                                  (LPTSTR) &lpMsgBuf,
                     36:                                  0,
                     37:                                  NULL);
                     38: 
                     39:     MessageBox(NULL, (LPCTSTR)lpMsgBuf, "libConfuse error", MB_OK | MB_ICONINFORMATION );
                     40:     LocalFree( lpMsgBuf );
                     41: }
                     42: 
                     43: typedef cfg_t *(*CFG_INIT_FPTR)(cfg_opt_t *opts, cfg_flag_t flags);
                     44: typedef void (*CFG_FREE_FPTR)(cfg_t *cfg);
                     45: typedef int (*CFG_PARSE_FPTR)(cfg_t *cfg, const char *filename);
                     46: typedef cfg_bool_t (*CFG_GETBOOL_FPTR)(cfg_t *cfg, const char *name);
                     47: typedef long int (*CFG_GETINT_FPTR)(cfg_t *cfg, const char *name);
                     48: typedef char * (*CFG_GETSTR_FPTR)(cfg_t *cfg, const char *name);
                     49: typedef double (*CFG_GETFLOAT_FPTR)(cfg_t *cfg, const char *name);
                     50: 
                     51: int main(void)
                     52: {
                     53:     cfg_opt_t opts[] = {
                     54:         CFG_BOOL("bool", cfg_false, 0),
                     55:         CFG_STR("string", "default test string", 0),
                     56:         CFG_INT("number", 17, 0),
                     57:         CFG_FLOAT("float", 6.789, 0),
                     58:         CFG_FUNC("message", &cb_message),
                     59:         CFG_END()
                     60:     };
                     61:     HINSTANCE hinstLib;
                     62:     char buf[1024];
                     63: 
                     64:     CFG_INIT_FPTR cfg_init;
                     65:     CFG_PARSE_FPTR cfg_parse;
                     66:     CFG_FREE_FPTR cfg_free;
                     67:     CFG_GETBOOL_FPTR cfg_getbool;
                     68:     CFG_GETINT_FPTR cfg_getint;
                     69:     CFG_GETSTR_FPTR cfg_getstr;
                     70:     CFG_GETFLOAT_FPTR cfg_getfloat;
                     71: 
                     72:     /* Get a handle to the DLL module. */
                     73:     hinstLib = LoadLibrary("libConfuse");
                     74: 
                     75:     /* If the handle is valid, try to get the function address. */
                     76:     if(hinstLib != NULL) {
                     77:         cfg_init = (CFG_INIT_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_init"));
                     78:         cfg_parse = (CFG_PARSE_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_parse"));
                     79:         cfg_free = (CFG_FREE_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_free"));
                     80:         cfg_getbool = (CFG_GETBOOL_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_getbool"));
                     81:         cfg_getint = (CFG_GETINT_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_getint"));
                     82:         cfg_getstr = (CFG_GETSTR_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_getstr"));
                     83:         cfg_getfloat = (CFG_GETFLOAT_FPTR)GetProcAddress(hinstLib, DLLSYM("cfg_getfloat"));
                     84: 
                     85:         if(cfg_init) { /* assume the other functions also are valid */
                     86:             cfg_t *cfg = cfg_init(opts, 0);
                     87:             if(cfg_parse(cfg, "wincfgtest.conf") == CFG_FILE_ERROR)
                     88:                 perror("wincfgtest.conf");
                     89: 
                     90:                sprintf(buf, "bool:    %s\nstring:  %s\nnumber:  %ld\nfloat:   %f\n",
                     91:                cfg_getbool(cfg, "bool") ? "true" : "false", cfg_getstr(cfg, "string"),
                     92:                cfg_getint(cfg, "number"), cfg_getfloat(cfg, "float"));
                     93:                MessageBox(NULL, buf, "libConfuse", MB_OK);
                     94: 
                     95:             cfg_free(cfg);
                     96:         } else
                     97:                display_last_error();
                     98: 
                     99:         FreeLibrary(hinstLib);
                    100:     } else
                    101:        display_last_error();
                    102: 
                    103:     return 0;
                    104: }
                    105: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>