diff options
Diffstat (limited to 'plugins/pychrysa/pychrysa.c')
| -rw-r--r-- | plugins/pychrysa/pychrysa.c | 179 | 
1 files changed, 177 insertions, 2 deletions
| diff --git a/plugins/pychrysa/pychrysa.c b/plugins/pychrysa/pychrysa.c index f2dbf0f..865c0fc 100644 --- a/plugins/pychrysa/pychrysa.c +++ b/plugins/pychrysa/pychrysa.c @@ -24,10 +24,12 @@  #include "pychrysa.h" +#if 0 +  #include <dirent.h>  #include <pygobject.h>  #include <string.h> -#include <pygtk/pygtk.h> +//#include <pygtk/pygtk.h>  #include <config.h> @@ -252,8 +254,33 @@ PluginAction get_plugin_action(const GPluginModule *plugin)  *                                                                             *  ******************************************************************************/ -PyMODINIT_FUNC PyInit_pychrysa(void) +PyMODINIT_FUNC initpychrysa/*PyInit_pychrysa*/(void)  { +    PyObject *module; + +    //init_pygobject(); +    //init_pygtk(); + +    pychrysalide_init_quirks(); + +    module = Py_InitModule("pychrysalide", SpamMethods); + +    //add_analysis_roptions_to_python_module(module); +    add_analysis_module_to_python_module(module); +    add_arch_module_to_python_module(module); +    add_debug_module_to_python_module(module); +    add_format_module_to_python_module(module); +    add_glibext_module_to_python_module(module); +    add_gtkext_module_to_python_module(module); +    add_gui_module_to_python_module(module); + +    add_plugin_to_python_module(module); + + +    /* + + +      static struct PyModuleDef spammodule = {          PyModuleDef_HEAD_INIT,          "pychrysalide", @@ -264,6 +291,8 @@ PyMODINIT_FUNC PyInit_pychrysa(void)      PyModule_Create(&spammodule); +    */ +  }  #else @@ -305,3 +334,149 @@ PyMODINIT_FUNC initpychrysa(void)  }  #endif + + + +#endif + + + + + + + +#include <pygobject.h> + + +#include "../../revision.h" + + +#include "analysis/module.h" +#include "arch/module.h" + + + +// TODO : à bouger ? +#include "../../src/arch/processor.h" +#include "../../src/format/format.h" + + + +/* Fournit la version du programme global. */ +static PyObject *py_chrysalide_version(PyObject *, PyObject *); + + + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : self = NULL car méthode statique.                            * +*                args = non utilisé ici.                                      * +*                                                                             * +*  Description : Fournit la version du programme global.                      * +*                                                                             * +*  Retour      : Numéro de révision.                                          * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *py_chrysalide_version(PyObject *self, PyObject *args) +{ +    char version[16]; +    int major; +    int minor; +    int revision; + +    major = REVISION / 1000; +    minor = (REVISION - (major * 1000)) / 100; +    revision = REVISION % 100; + +    snprintf(version, sizeof(version), "%d.%d.%d", major, minor, revision); + +    return PyUnicode_FromString(version); + +} + + + + + + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : -                                                            * +*                                                                             * +*  Description : Point d'entrée pour l'initialisation de Python.              * +*                                                                             * +*  Retour      : ?                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +PyMODINIT_FUNC PyInit_pychrysalide(void) +{ +    PyObject *result;                       /* Module Python à retourner   */ +    PyObject *pygobj_mod;                   /* Module Python-GObject       */ +    bool status;                            /* Bilan des inclusions        */ + +    static PyMethodDef py_chrysalide_methods[] = { + +        { "version", py_chrysalide_version, +          METH_NOARGS, +          "Provide the revision number of Chrysalide." +        }, +        { "python", py_chrysalide_version, +          METH_NOARGS, +          "Provide the revision number of Chrysalide module for Python." +        }, +        { NULL } + +    }; + +    static PyModuleDef py_chrysalide_module = { + +        .m_base = PyModuleDef_HEAD_INIT, + +        .m_name = "pychrysalide", +        .m_doc = "Python module for Chrysalide", + +        .m_size = -1, + +        .m_methods = py_chrysalide_methods + +    }; + + +    // TODO : à bouger ! +    init_all_processors(); +    init_all_formats(); + + +    if (pygobject_init(-1, -1, -1) == NULL) +        return NULL; + +    /** +     * Pour une raison non identifiée, si le module n'est pas préchargé, +     * le flot d'exécution plante dans la fonction insertdict() de Objects/dictobject.c:818. +     */ +    pygobj_mod = PyImport_ImportModule("gi.repository.GObject"); +    if (pygobj_mod == NULL) +        return NULL; + +    result = PyModule_Create(&py_chrysalide_module); + +    status = true; + +    status &= add_analysis_module_to_python_module(result); +    status &= add_arch_module_to_python_module(result); + +    printf("status :: %d\n", status); + +    /* TODO : if !status... */ + +    return result; + +} | 
