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>