Annotation of embedaddon/confuse/examples/wincfgtest.c, revision 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>