/* OpenIDA - Outil d'analyse de fichiers binaires
 * pyoida.c - plugin permettant des extensions en Python
 *
 * Copyright (C) 2009 Cyrille Bagard
 *
 *  This file is part of OpenIDA.
 *
 *  OpenIDA is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  OpenIDA is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Foobar.  If not, see .
 */
#include "pyoida.h"
#include 
#include "analysis/module.h"
#include "arch/module.h"
#include "format/module.h"
/*
#include "analysis/py_binary.h"
#include "analysis/py_line.h"
#include "analysis/py_line_code.h"
#include "analysis/roptions.h"
*/
#include "plugin.h"
#include "py_log.h"
#include "../../src/common/environment.h"
#include "plugin.h"
static GObject *_ref = NULL;
static PyObject *pyoida_get_current_binary(PyObject *self, PyObject *args)
{
    GOpenidaBinary *binary;                 /* Structure à copier          */
    binary = (GOpenidaBinary *)g_object_get_data(_ref, "current_binary");
    return pybinary_new_from_existing(binary);
}
static PyMethodDef SpamMethods[] = {
    {"current_binary",  pyoida_get_current_binary, METH_NOARGS,
     "Give the current analyzed binary."},
    {NULL, NULL, 0, NULL}        /* Sentinel */
};
/******************************************************************************
*                                                                             *
*  Paramètres  : ref = espace de référencement global.                        *
*                                                                             *
*  Description : Initialise le greffon permettant l'usage de Python.          *
*                                                                             *
*  Retour      : true.                                                        *
*                                                                             *
*  Remarques   : -                                                            *
*                                                                             *
******************************************************************************/
bool init_plugin(GObject *ref)
{
    GPluginModule *plugin;
    int ret;
    printf("Init pyoida\n");
    _ref = ref;
    add_to_env_var("PYTHONPATH", "/home/ocb/prog/openida/plugins/python", ";");
    return false;
    Py_Initialize();
    initpyoida();
    plugin = g_python_plugin_new("lnxsyscalls/lnxsyscalls");
    add_plugin_to_main_list(plugin);
#if 0
#if 0
    //main2("/home/ocb/prog/openida/plugins/pyoida/lnxsyscalls/lnxsyscalls.py", "get_instance");
    main2("lnxsyscalls", "get_instance");
#else
    //main2("/home/ocb/prog/openida/plugins/pyoida/lnxsyscalls/lnxsyscalls.py", "get_instance");
    main2("lnxsyscalls/lnxsyscalls", "get_instance");
#endif
#endif
    //Py_Finalize();
    //exit(-1);
    return true;
}
#if PY_VERSION_HEX >= 0x03000000
/* Python 3.x code */
static struct PyModuleDef spammodule = {
   PyModuleDef_HEAD_INIT,
   "pyoida",   /* name of module */
   "pyoida_doc", /* module documentation, may be NULL */
   -1,       /* size of per-interpreter state of the module,
                or -1 if the module keeps state in global variables. */
   SpamMethods
};
PyMODINIT_FUNC
PyInit_pyoida(void)
{
    printf("Passage 3\n");
    (void) PyModule_Create(&spammodule);
}
#else
/* Python 2.x code */
typedef struct {
	PyObject_HEAD
	PyObject *md_dict;
} PyModuleObject;
PyMODINIT_FUNC
initpyoida(void)
{
    PyObject *module;
    printf("Passage 2\n");
    module = Py_InitModule("pyoida", SpamMethods);
    //add_analysis_roptions_to_python_module(module);
    add_analysis_module_to_python_module(module);
    add_arch_module_to_python_module(module);
    add_format_module_to_python_module(module);
    add_log_to_python_module(module);
    add_plugin_to_python_module(module);
}
#endif