//@+leo-ver=4
//@+node:@file src/c/bisondynlib-win32.c
//@@language c
/*
 * Linux-specific dynamic library manipulation routines
 */

#include <stdio.h>
#include "bisondynlib.h"

#include "windows.h"

//#include "dlluser.h"

void * bisondynlib_open(char *filename)
{
    HINSTANCE hinstLib; 

    hinstLib = LoadLibrary(filename);

    return (void *)hinstLib;
}

int  bisondynlib_close(void *handle)
{
    return FreeLibrary((HINSTANCE)handle); 
}

char * bisondynlib_err()
{
    return NULL;
}


char * bisondynlib_lookup_hash(void *handle)
{
    char *hash;

    hash = (char *)GetProcAddress((HINSTANCE)handle, "rules_hash"); 
    printf("bisondynlib_lookup_hash: hash=%s\n", hash);
    return hash;
}

PyObject * bisondynlib_run(void *handle, PyObject *parser, char *filename, void *cb)
{
    PyObject *(*pparser)(PyObject *, char *, void *);

    //printf("bisondynlib_run: looking up parser\n");
    pparser = bisondynlib_lookup_parser(handle);
    //printf("bisondynlib_run: calling parser\n");

    (*pparser)(parser, filename, cb);

    //printf("bisondynlib_run: back from parser\n");
    //return result;
    Py_INCREF(Py_None);
    return Py_None;

}

/*
 * function(void *) returns a pointer to a function(PyObject *, char *) returning PyObject*
 */
PyObject *(*bisondynlib_lookup_parser(void *handle))(PyObject *, char *, void *)
{
    //void *pparser;
    PyObject *(*pparser)(PyObject *, char *, void *);
    
    pparser = (PyObject *(*)(PyObject *, char *, void *))GetProcAddress((HINSTANCE)handle, "do_parse");

    return pparser;
}

/*
 * Runs the compiler commands which build the parser/lexer into a shared lib
 */
 /*
int bisondynlib_build(char *libName, char *pyincdir)
{
    char buf[1024];
    sprintf(buf, "gcc -fPIC -shared -I%s tmp.bison.c tmp.lex.c -o %s", pyincdir, libName);
    printf("Running linux build command: %s\n", buf);
    system(buf);
    return 0;
}
*/

//@-node:@file src/c/bisondynlib-win32.c
//@-leo


syntax highlighted by Code2HTML, v. 0.9.1