From 3bf12eda58a8d04ac3d2d6754a480de4c262570d Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 25 Jun 2014 06:46:04 +0000
Subject: Built the first steps to upgrade to Python3.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@379 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                                   |  52 ++
 configure.ac                                |  18 +-
 plugins/pychrysa/Makefile.am                |  16 +-
 plugins/pychrysa/analysis/Makefile.am       |  19 +-
 plugins/pychrysa/analysis/binaries/file.c   | 116 +++-
 plugins/pychrysa/analysis/binaries/file.h   |   7 +-
 plugins/pychrysa/analysis/binaries/module.c |  43 +-
 plugins/pychrysa/analysis/binaries/module.h |   2 +-
 plugins/pychrysa/analysis/binary.c          | 102 +++
 plugins/pychrysa/analysis/binary.h          |   3 +
 plugins/pychrysa/analysis/module.c          |  92 +++
 plugins/pychrysa/analysis/module.h          |   6 +-
 plugins/pychrysa/arch/Makefile.am           |  10 +-
 plugins/pychrysa/arch/archbase.h            |  20 +-
 plugins/pychrysa/arch/instruction.c         |   2 +-
 plugins/pychrysa/arch/module.c              |  47 +-
 plugins/pychrysa/arch/module.h              |   6 +-
 plugins/pychrysa/arch/vmpa.c                | 325 ++++++++++
 plugins/pychrysa/arch/vmpa.h                |  42 ++
 plugins/pychrysa/pychrysa.c                 | 179 +++++-
 plugins/pychrysa/pychrysa.h                 |  27 +-
 plugins/pychrysa/quirks.c                   |   2 +-
 po/POTFILES.in                              | 580 +++++++++--------
 po/fr.po                                    | 924 +++++++++++++++++-----------
 src/analysis/binaries/file.c                |   5 +-
 src/analysis/binaries/file.h                |   3 +
 src/arch/Makefile.am                        |   3 +-
 src/arch/vmpa.c                             |  87 +++
 src/arch/vmpa.h                             |  68 ++
 src/gtkext/gtkdockstation.c                 |   4 +-
 30 files changed, 2067 insertions(+), 743 deletions(-)
 create mode 100644 plugins/pychrysa/arch/vmpa.c
 create mode 100644 plugins/pychrysa/arch/vmpa.h
 create mode 100644 src/arch/vmpa.c
 create mode 100644 src/arch/vmpa.h

diff --git a/ChangeLog b/ChangeLog
index 83dcb63..69620f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,55 @@
+14-06-25  Cyrille Bagard <nocbos@gmail.com>
+
+	* configure.ac:
+	Update version and look for python3 + pygobject-3.0.
+
+	* plugins/pychrysa/analysis/binaries/file.c:
+	* plugins/pychrysa/analysis/binaries/file.h:
+	* plugins/pychrysa/analysis/binaries/module.c:
+	* plugins/pychrysa/analysis/binaries/module.h:
+	* plugins/pychrysa/analysis/binary.c:
+	* plugins/pychrysa/analysis/binary.h:
+	* plugins/pychrysa/analysis/Makefile.am:
+	* plugins/pychrysa/analysis/module.c:
+	* plugins/pychrysa/analysis/module.h:
+	* plugins/pychrysa/arch/archbase.h:
+	* plugins/pychrysa/arch/instruction.c:
+	* plugins/pychrysa/arch/Makefile.am:
+	* plugins/pychrysa/arch/module.c:
+	* plugins/pychrysa/arch/module.h:
+	Build the first steps to upgrade to Python3.
+
+	* plugins/pychrysa/arch/vmpa.c:
+	* plugins/pychrysa/arch/vmpa.h:
+	New entries: copy some definitions from <arch/vmpa.h>.
+
+	* plugins/pychrysa/Makefile.am:
+	Define a new name for the Python extension.
+
+	* plugins/pychrysa/pychrysa.c:
+	* plugins/pychrysa/pychrysa.h:
+
+	* plugins/pychrysa/quirks.c:
+	Do not include an old header anymore.
+
+	* po/fr.po:
+	* po/POTFILES.in:
+	Update the list of processed files.
+
+	* src/analysis/binaries/file.c:
+	* src/analysis/binaries/file.h:
+	Give access to the binary filename.
+
+	* src/arch/Makefile.am:
+	Add the 'vmpa.[ch] files to libarch_la_SOURCES.
+
+	* src/arch/vmpa.c:
+	* src/arch/vmpa.h:
+	New entries: introduce a new type for addresses.
+
+	* src/gtkext/gtkdockstation.c:
+	Disable calls to configuration, due to the Python shared object.
+
 14-06-05  Cyrille Bagard <nocbos@gmail.com>
 
 	* src/gtkext/gtkbufferview.c:
diff --git a/configure.ac b/configure.ac
index 7982079..e318ba4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,13 +5,13 @@
 ############################################################
 
 AC_PREREQ(2.59)
-AC_INIT([openida], [0.3.11], [nocbos@gmail.com])
+AC_INIT([chrysalide], [0.3.78], [nocbos@gmail.com])
 
 AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE
 AM_SILENT_RULES
 
-AM_GNU_GETTEXT_VERSION([0.17])
+AM_GNU_GETTEXT_VERSION([0.18.3])
 AM_GNU_GETTEXT([external])
 
 AC_CONFIG_SRCDIR([src/editor.c])
@@ -219,23 +219,23 @@ AC_SUBST(LIBSQLITE_LIBS)
 #--- Checks for Python
 
 if test "x$enable_debug" = "xyes"; then
-   LIBPYTHON_CFLAGS=`python-dbg-config --cflags`
-   LIBPYTHON_LIBS=`python-dbg-config --libs`
+   LIBPYTHON_CFLAGS=`python3-dbg-config --cflags`
+   LIBPYTHON_LIBS=`python3-dbg-config --libs`
 else
-   LIBPYTHON_CFLAGS=`python-config --cflags`
-   LIBPYTHON_LIBS=`python-config --libs`
+   LIBPYTHON_CFLAGS=`python3-config --cflags`
+   LIBPYTHON_LIBS=`python3-config --libs`
 fi
 
 AC_SUBST(LIBPYTHON_CFLAGS)
 AC_SUBST(LIBPYTHON_LIBS)
 
 
-#--- Checks for pygobject-2.0
+#--- Checks for pygobject-3.0
 
-PKG_CHECK_MODULES(LIBPYGOBJECT,pygobject-2.0 >= 2.21.1,[libpygobject_found=yes],[libpygobject_found=no])
+PKG_CHECK_MODULES(LIBPYGOBJECT,pygobject-3.0 >= 3.12.1,[libpygobject_found=yes],[libpygobject_found=no])
 
 if test "$libpygobject_found" = "yes"; then
-   libpygobject_version=`pkg-config pygobject-2.0 --modversion`
+   libpygobject_version=`pkg-config pygobject-3.0 --modversion`
 else
    libpygobject_version='-'
 fi
diff --git a/plugins/pychrysa/Makefile.am b/plugins/pychrysa/Makefile.am
index 3032c0e..8664193 100644
--- a/plugins/pychrysa/Makefile.am
+++ b/plugins/pychrysa/Makefile.am
@@ -1,5 +1,5 @@
 
-pkglib_LTLIBRARIES = pychrysa.la
+pkglib_LTLIBRARIES = pychrysa.la pychrysalide.la
 
 pychrysa_la_SOURCES =					\
 	helpers.h helpers.c					\
@@ -22,6 +22,20 @@ pychrysa_la_LDFLAGS = -module -avoid-version $(LIBGTK_LIBS) $(LIBXML_LIBS) $(LIB
 	-L../../src/plugins/.libs -lplugins
 
 
+pychrysalide_la_SOURCES =				\
+	pychrysa.h pychrysa.c
+
+pychrysalide_la_LIBADD =				\
+	analysis/libpychrysaanalysis.la		\
+	arch/libpychrysaarch.la
+
+pychrysalide_la_LDFLAGS = -module -avoid-version \
+	$(LIBPYTHON_LIBS) $(LIBSQLITE_LIBS) $(LIBARCHIVE_LIBS) \
+	-L../../src/.libs -lchrysadisass -lchrysagtkext \
+	-L../../src/plugins/.libs -lplugins
+
+
+
 AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
 	-I../../src
 
diff --git a/plugins/pychrysa/analysis/Makefile.am b/plugins/pychrysa/analysis/Makefile.am
index f970d94..9b9ac18 100644
--- a/plugins/pychrysa/analysis/Makefile.am
+++ b/plugins/pychrysa/analysis/Makefile.am
@@ -3,14 +3,21 @@ noinst_LTLIBRARIES = libpychrysaanalysis.la
 
 libpychrysaanalysis_la_SOURCES =		\
 	binary.h binary.c					\
-	block.h block.c						\
-	module.h module.c					\
-	roptions.h roptions.c				\
-	routine.h routine.c
+	module.h module.c
 
 libpychrysaanalysis_la_LIBADD =			\
-	binaries/libpychrysaanalysisbinaries.la	\
-	blocks/libpychrysaanalysisblocks.la
+	binaries/libpychrysaanalysisbinaries.la
+
+# libpychrysaanalysis_la_SOURCES =		\
+# 	binary.h binary.c					\
+# 	block.h block.c						\
+# 	module.h module.c					\
+# 	roptions.h roptions.c				\
+# 	routine.h routine.c
+
+# libpychrysaanalysis_la_LIBADD =			\
+# 	binaries/libpychrysaanalysisbinaries.la	\
+# 	blocks/libpychrysaanalysisblocks.la
 
 libpychrysaanalysis_la_LDFLAGS = 
 
diff --git a/plugins/pychrysa/analysis/binaries/file.c b/plugins/pychrysa/analysis/binaries/file.c
index 2b2a460..28bfecb 100644
--- a/plugins/pychrysa/analysis/binaries/file.c
+++ b/plugins/pychrysa/analysis/binaries/file.c
@@ -25,20 +25,21 @@
 #include "file.h"
 
 
-
 #include <pygobject.h>
 
 
 #include <analysis/binaries/file.h>
 
 
+#include "../binary.h"
 
 
-/* Crée un nouvel objet Python de type 'FileBinary'. */
-static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *);
-
 
+/* Crée un nouvel objet Python de type 'BinaryFile'. */
+static PyObject *py_binary_file_new(PyTypeObject *, PyObject *, PyObject *);
 
+/* Fournit le chemin d'accès au binaire représenté. */
+static PyObject *py_binary_file_get_filename(PyObject *, void *);
 
 
 
@@ -48,7 +49,7 @@ static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *);
 *                args = arguments fournis à l'appel.                          *
 *                kwds = arguments de type key=val fournis.                    *
 *                                                                             *
-*  Description : Crée un nouvel objet Python de type 'FileBinary'.            *
+*  Description : Crée un nouvel objet Python de type 'BinaryFile'.            *
 *                                                                             *
 *  Retour      : Instance Python mise en place.                               *
 *                                                                             *
@@ -56,7 +57,7 @@ static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *);
 *                                                                             *
 ******************************************************************************/
 
-static PyObject *py_file_binary_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+static PyObject *py_binary_file_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
     PyObject *result;                       /* Instance à retourner        */
     char *filename;                         /* Nom du fichier à charger    */
@@ -69,74 +70,121 @@ static PyObject *py_file_binary_new(PyTypeObject *type, PyObject *args, PyObject
     binary = g_file_binary_new_from_file(filename);
 
     result = pygobject_new(G_OBJECT(binary));
-    //g_object_unref(binary);
+    g_object_unref(binary);
 
     return result;
 
 }
 
 
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = NULL car méthode statique.                         *
+*                closure = non utilisé ici.                                   *
+*                                                                             *
+*  Description : Fournit le chemin d'accès au binaire représenté.             *
+*                                                                             *
+*  Retour      : Chemin d'accès en Python.                                    *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
 
+static PyObject *py_binary_file_get_filename(PyObject *self, void *closure)
+{
+    const GFileBinary *file;                /* Fichier binaire concerné    */
+    const char *filename;                   /* Chemin d'accès à diffuser   */
+
+    file = G_FILE_BINARY(pygobject_get(self));
+    filename = g_file_binary_get_filename(file, true);
 
+    return PyUnicode_FromString(filename);
+
+}
 
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : module = module dont la définition est à compléter.          *
+*  Paramètres  : -                                                            *
 *                                                                             *
-*  Description : Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'.*
+*  Description : Fournit un accès à une définition de type à diffuser.        *
 *                                                                             *
-*  Retour      : Bilan de l'opération.                                        *
+*  Retour      : Définition d'objet pour Python.                              *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-bool register_python_file_binary(PyObject *module)
+PyTypeObject *get_python_binary_file_type(void)
 {
-    PyObject *parent_mod;                   /* Module Python-LoadedBinary  */
-    int ret;                                /* Bilan d'un appel            */
-
-    static PyMethodDef py_file_binary_methods[] = {
+    static PyMethodDef py_binary_file_methods[] = {
         { NULL }
     };
 
-    static PyGetSetDef py_file_binary_getseters[] = {
+    static PyGetSetDef py_binary_file_getseters[] = {
+        {
+            "filename", py_binary_file_get_filename, NULL,
+            "Show the filename of the loaded binary file.", NULL
+        },
         { NULL }
     };
 
-    static PyTypeObject py_file_binary_type = {
+    static PyTypeObject py_binary_file_type = {
 
-        PyObject_HEAD_INIT(NULL)
+        PyVarObject_HEAD_INIT(NULL, 0)
 
-        .tp_name        = "pychrysalide.analysis.binaries.FileBinary",
+        .tp_name        = "pychrysalide.analysis.binaries.BinaryFile",
         .tp_basicsize   = sizeof(PyGObject),
 
-        .tp_flags       = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+        .tp_flags       = Py_TPFLAGS_DEFAULT,
 
-        .tp_doc         = "PyChrysalide file binary",
+        .tp_doc         = "PyChrysalide binary file",
 
-        .tp_methods     = py_file_binary_methods,
-        .tp_getset      = py_file_binary_getseters,
-        .tp_new         = (newfunc)py_file_binary_new
+        .tp_methods     = py_binary_file_methods,
+        .tp_getset      = py_binary_file_getseters,
+        .tp_new         = (newfunc)py_binary_file_new
 
     };
 
-    parent_mod = PyImport_ImportModule("pychrysalide.analysis");
-    if (parent_mod == NULL) return false;
+    return &py_binary_file_type;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : module = module dont la définition est à compléter.          *
+*                                                                             *
+*  Description : Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'.*
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool register_python_binary_file(PyObject *module)
+{
+    PyTypeObject *py_binary_file_type;      /* Type Python 'LoadedBinary'  */
+    int ret;                                /* Bilan d'un appel            */
+    PyObject *dict;                         /* Dictionnaire du module      */
+
+    py_binary_file_type = get_python_binary_file_type();
 
-    py_file_binary_type.tp_base = (PyTypeObject *)PyObject_GetAttrString(parent_mod, "LoadedBinary");
-    Py_DECREF(parent_mod);
+    py_binary_file_type->tp_base = get_python_loaded_binary_type();
+    py_binary_file_type->tp_basicsize = py_binary_file_type->tp_base->tp_basicsize;
 
-    if (PyType_Ready(&py_file_binary_type) < 0)
+    if (PyType_Ready(py_binary_file_type) < 0)
         return false;
 
-    Py_INCREF(&py_file_binary_type);
-    ret = PyModule_AddObject(module, "FileBinary", (PyObject *)&py_file_binary_type);
+    Py_INCREF(py_binary_file_type);
+    ret = PyModule_AddObject(module, "BinaryFile", (PyObject *)py_binary_file_type);
+    if (ret != 0) return false;
 
-    pygobject_register_class(module, "GFileBinary", G_TYPE_FILE_BINARY, &py_file_binary_type,
-                             Py_BuildValue("(O)", py_file_binary_type.tp_base));
+    dict = PyModule_GetDict(module);
+    pygobject_register_class(dict, "BinaryFile", G_TYPE_FILE_BINARY, py_binary_file_type,
+                             Py_BuildValue("(O)", py_binary_file_type->tp_base));
 
-    return (ret == 0);
+    return true;
 
 }
diff --git a/plugins/pychrysa/analysis/binaries/file.h b/plugins/pychrysa/analysis/binaries/file.h
index 2ba9ed0..b381379 100644
--- a/plugins/pychrysa/analysis/binaries/file.h
+++ b/plugins/pychrysa/analysis/binaries/file.h
@@ -31,8 +31,11 @@
 
 
 
-/* Prend en charge l'objet 'pychrysalide.analysis.binaries.FileBinary'. */
-bool register_python_file_binary(PyObject *);
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_binary_file_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.analysis.binaries.BinaryFile'. */
+bool register_python_binary_file(PyObject *);
 
 
 
diff --git a/plugins/pychrysa/analysis/binaries/module.c b/plugins/pychrysa/analysis/binaries/module.c
index aae0a33..c2adddf 100644
--- a/plugins/pychrysa/analysis/binaries/module.c
+++ b/plugins/pychrysa/analysis/binaries/module.c
@@ -41,25 +41,50 @@
 *                                                                             *
 ******************************************************************************/
 
-bool add_binaries_module_to_python_module(PyObject *super)
+bool add_analysis_binaries_module_to_python_module(PyObject *super)
 {
-    bool result;
-    PyObject *module;
+    bool result;                            /* Bilan à retourner           */
+    PyObject *module;                       /* Sous-module mis en place    */
     int ret;                                /* Bilan d'un appel            */
 
-    static PyMethodDef py_format_methods[] = {
-        { NULL }
+    static PyModuleDef py_chrysalide_arch_module = {
+
+        .m_base = PyModuleDef_HEAD_INIT,
+
+        .m_name = "pychrysalide.analysis.binaries",
+        .m_doc = "Python module for Chrysalide.analysis.binaries",
+
+        .m_size = -1,
+
     };
 
-    module = Py_InitModule("pychrysalide.analysis.binaries", py_format_methods);
+    result = false;
+
+    module = PyModule_Create(&py_chrysalide_arch_module);
     if (module == NULL) return false;
 
+    ret = PyState_AddModule(super, &py_chrysalide_arch_module);
+    if (ret != 0) goto aabmtpm_exit;
+
+    ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis.binaries");
+    if (ret != 0) goto aabmtpm_exit;
+
     Py_INCREF(module);
-    ret = PyModule_AddObject(super, "pychrysalide.analysis.binaries", module);
+    ret = PyModule_AddObject(super, "binaries", module);
+    if (ret != 0) goto aabmtpm_exit;
+
+    result = true;
+
+    result &= register_python_binary_file(module);
+
+ aabmtpm_exit:
 
-    result = (ret == 0);
+    if (!result)
+    {
+        printf("something went wrong in %s...\n", __FUNCTION__);
+        /* ... */
 
-    result &= register_python_file_binary(module);
+    }
 
     return result;
 
diff --git a/plugins/pychrysa/analysis/binaries/module.h b/plugins/pychrysa/analysis/binaries/module.h
index 1fd62d0..653f7da 100644
--- a/plugins/pychrysa/analysis/binaries/module.h
+++ b/plugins/pychrysa/analysis/binaries/module.h
@@ -32,7 +32,7 @@
 
 
 /* Ajoute le module 'binaries' au module Python. */
-bool add_binaries_module_to_python_module(PyObject *);
+bool add_analysis_binaries_module_to_python_module(PyObject *);
 
 
 
diff --git a/plugins/pychrysa/analysis/binary.c b/plugins/pychrysa/analysis/binary.c
index c570cf9..807df7e 100644
--- a/plugins/pychrysa/analysis/binary.c
+++ b/plugins/pychrysa/analysis/binary.c
@@ -28,6 +28,105 @@
 #include <pygobject.h>
 
 
+
+
+
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Fournit un accès à une définition de type à diffuser.        *
+*                                                                             *
+*  Retour      : Définition d'objet pour Python.                              *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+PyTypeObject *get_python_loaded_binary_type(void)
+{
+    static PyTypeObject py_loaded_binary_type = {
+
+        PyVarObject_HEAD_INIT(NULL, 0)
+
+        .tp_name = "pychrysalide.analysis.LoadedBinary",
+
+        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+        .tp_doc = "PyChrysalide loaded binary",
+
+    };
+
+    return &py_loaded_binary_type;
+
+}
+
+
+
+#include <analysis/binary.h>
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : module = module dont la définition est à compléter.          *
+*                                                                             *
+*  Description : Prend en charge l'objet 'pychrysalide.arch.loaded_binary'.   *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool register_python_loaded_binary(PyObject *module)
+{
+    PyTypeObject *py_loaded_binary_type;    /* Type Python 'LoadedBinary'  */
+    int ret;                                /* Bilan d'un appel            */
+    PyObject *dict;                         /* Dictionnaire du module      */
+
+    py_loaded_binary_type = get_python_loaded_binary_type();
+
+    py_loaded_binary_type->tp_base = &PyGObject_Type;
+    py_loaded_binary_type->tp_basicsize = py_loaded_binary_type->tp_base->tp_basicsize;
+
+    if (PyType_Ready(py_loaded_binary_type) != 0)
+        return false;
+
+    Py_INCREF(py_loaded_binary_type);
+    ret = PyModule_AddObject(module, "LoadedBinary", (PyObject *)py_loaded_binary_type);
+    if (ret != 0) return false;
+
+    dict = PyModule_GetDict(module);
+    pygobject_register_class(dict, "LoadedBinary", G_TYPE_LOADED_BINARY, py_loaded_binary_type,
+                             Py_BuildValue("(O)", py_loaded_binary_type->tp_base));
+
+    return true;
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+#if 0
+
+
+#include <pygobject.h>
+
+
 #include <analysis/binary.h>
 
 
@@ -258,3 +357,6 @@ bool register_python_loaded_binary(PyObject *module)
     return (ret == 0);
 
 }
+
+#endif
+
diff --git a/plugins/pychrysa/analysis/binary.h b/plugins/pychrysa/analysis/binary.h
index cb78024..83ea7c7 100644
--- a/plugins/pychrysa/analysis/binary.h
+++ b/plugins/pychrysa/analysis/binary.h
@@ -31,6 +31,9 @@
 
 
 
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_loaded_binary_type(void);
+
 /* Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'. */
 bool register_python_loaded_binary(PyObject *);
 
diff --git a/plugins/pychrysa/analysis/module.c b/plugins/pychrysa/analysis/module.c
index 54509a8..e13c8f8 100644
--- a/plugins/pychrysa/analysis/module.c
+++ b/plugins/pychrysa/analysis/module.c
@@ -26,6 +26,97 @@
 
 
 #include "binary.h"
+#include "binaries/module.h"
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : module = module dont la définition est à compléter.          *
+*                                                                             *
+*  Description : Ajoute le module 'analysis' au module Python.                *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool add_analysis_module_to_python_module(PyObject *super)
+{
+    bool result;                            /* Bilan à retourner           */
+    PyObject *module;                       /* Sous-module mis en place    */
+    int ret;                                /* Bilan d'un appel            */
+
+    static PyModuleDef py_chrysalide_arch_module = {
+
+        .m_base = PyModuleDef_HEAD_INIT,
+
+        .m_name = "pychrysalide.analysis",
+        .m_doc = "Python module for Chrysalide.analysis",
+
+        .m_size = -1,
+
+    };
+
+    result = false;
+
+    module = PyModule_Create(&py_chrysalide_arch_module);
+    if (module == NULL) return false;
+
+    ret = PyState_AddModule(super, &py_chrysalide_arch_module);
+    if (ret != 0) goto aamtpm_exit;
+
+    ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis");
+    if (ret != 0) goto aamtpm_exit;
+
+    Py_INCREF(module);
+    ret = PyModule_AddObject(super, "analysis", module);
+    if (ret != 0) goto aamtpm_exit;
+
+    result = true;
+
+    result &= register_python_loaded_binary(module);
+
+    result &= add_analysis_binaries_module_to_python_module(module);
+
+ aamtpm_exit:
+
+    if (!result)
+    {
+        printf("something went wrong in %s...\n", __FUNCTION__);
+        /* ... */
+
+    }
+
+    return result;
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#if 0
+#include "binary.h"
 #include "block.h"
 #include "routine.h"
 #include "binaries/module.h"
@@ -72,3 +163,4 @@ bool add_analysis_module_to_python_module(PyObject *super)
     return result;
 
 }
+#endif
diff --git a/plugins/pychrysa/analysis/module.h b/plugins/pychrysa/analysis/module.h
index 0ff1167..bc4a65e 100644
--- a/plugins/pychrysa/analysis/module.h
+++ b/plugins/pychrysa/analysis/module.h
@@ -22,8 +22,8 @@
  */
 
 
-#ifndef _PLUGINS_PYOIDA_ANALYSIS_MODULE_H
-#define _PLUGINS_PYOIDA_ANALYSIS_MODULE_H
+#ifndef _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H
+#define _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H
 
 
 #include <Python.h>
@@ -36,4 +36,4 @@ bool add_analysis_module_to_python_module(PyObject *);
 
 
 
-#endif  /* _PLUGINS_PYOIDA_ANALYSIS_MODULE_H */
+#endif  /* _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H */
diff --git a/plugins/pychrysa/arch/Makefile.am b/plugins/pychrysa/arch/Makefile.am
index a01d570..54b9261 100644
--- a/plugins/pychrysa/arch/Makefile.am
+++ b/plugins/pychrysa/arch/Makefile.am
@@ -2,10 +2,14 @@
 noinst_LTLIBRARIES = libpychrysaarch.la
 
 libpychrysaarch_la_SOURCES =			\
-	archbase.h archbase.c				\
-	instruction.h instruction.c			\
 	module.h module.c					\
-	processor.h processor.c
+	vmpa.h vmpa.c
+
+# libpychrysaarch_la_SOURCES =			\
+# 	archbase.h archbase.c				\
+# 	instruction.h instruction.c			\
+# 	module.h module.c					\
+# 	processor.h processor.c
 
 
 libpychrysaarch_la_LDFLAGS = 
diff --git a/plugins/pychrysa/arch/archbase.h b/plugins/pychrysa/arch/archbase.h
index 8721371..b5d9811 100644
--- a/plugins/pychrysa/arch/archbase.h
+++ b/plugins/pychrysa/arch/archbase.h
@@ -1,8 +1,8 @@
 
 /* Chrysalide - Outil d'analyse de fichiers binaires
- * archbase.h - prototypes pour l'équivalent Python du fichier "arch/archbase.h"
+ * vmpa.h - prototypes pour l'équivalent Python du fichier "arch/vmpa.h"
  *
- * Copyright (C) 2010-2012 Cyrille Bagard
+ * Copyright (C) 2014 Cyrille Bagard
  *
  *  This file is part of Chrysalide.
  *
@@ -22,11 +22,19 @@
  */
 
 
-#ifndef _PLUGINS_PYOIDA_ARCH_ARCHBASE_H
-#define _PLUGINS_PYOIDA_ARCH_ARCHBASE_H
+#ifndef _PLUGINS_PYCHRYSA_ARCH_VMPA_H
+#define _PLUGINS_PYCHRYSA_ARCH_VMPA_H
+
 
 
 #include <Python.h>
+
+
+
+
+
+
+#if 0
 #include <stdbool.h>
 
 #include <arch/archbase.h>
@@ -38,7 +46,9 @@ PyObject *py_vmpa_new_from_existing(vmpa_t);
 
 /* Ajoute l'objet 'arch.vmpa' au module Python. */
 bool add_arch_vmpa_to_python_module(PyObject *);
+#endif
+
 
 
 
-#endif  /* _PLUGINS_PYOIDA_ARCH_ARCHBASE_H */
+#endif  /* _PLUGINS_PYCHRYSA_ARCH_VMPA_H */
diff --git a/plugins/pychrysa/arch/instruction.c b/plugins/pychrysa/arch/instruction.c
index 685d82f..efbdaa5 100644
--- a/plugins/pychrysa/arch/instruction.c
+++ b/plugins/pychrysa/arch/instruction.c
@@ -223,7 +223,7 @@ bool register_python_arch_instruction_iterator(PyObject *module)
 
         .tp_dealloc     = (destructor)py_arch_instruction_iterator_dealloc,
 
-        .tp_flags       = Py_TPFLAGS_HAVE_ITER | Py_TPFLAGS_HAVE_CLASS,
+        //.tp_flags       = Py_TPFLAGS_HAVE_ITER | Py_TPFLAGS_HAVE_CLASS,
 
         .tp_doc         = "PyChrysalide architecture instruction iterator",
 
diff --git a/plugins/pychrysa/arch/module.c b/plugins/pychrysa/arch/module.c
index 7e8fcb3..92172e0 100644
--- a/plugins/pychrysa/arch/module.c
+++ b/plugins/pychrysa/arch/module.c
@@ -25,9 +25,7 @@
 #include "module.h"
 
 
-#include "instruction.h"
-
-
+#include "vmpa.h"
 
 
 
@@ -45,28 +43,49 @@
 
 bool add_arch_module_to_python_module(PyObject *super)
 {
-    bool result;
-    PyObject *module;
+    bool result;                            /* Bilan à retourner           */
+    PyObject *module;                       /* Sous-module mis en place    */
     int ret;                                /* Bilan d'un appel            */
 
-    static PyMethodDef py_arch_methods[] = {
-        { NULL }
+    static PyModuleDef py_chrysalide_arch_module = {
+
+        .m_base = PyModuleDef_HEAD_INIT,
+
+        .m_name = "pychrysalide.arch",
+        .m_doc = "Python module for Chrysalide.arch",
+
+        .m_size = -1,
+
     };
 
-    module = Py_InitModule("pychrysalide.arch", py_arch_methods);
+    result = false;
+
+    module = PyModule_Create(&py_chrysalide_arch_module);
     if (module == NULL) return false;
 
+    ret = PyState_AddModule(super, &py_chrysalide_arch_module);
+    if (ret != 0) goto aamtpm_exit;
+
+    ret = _PyImport_FixupBuiltin(module, "pychrysalide.arch");
+    if (ret != 0) goto aamtpm_exit;
 
     Py_INCREF(module);
-    ret = PyModule_AddObject(super, "pychrysalide.arch", module);
+    ret = PyModule_AddObject(super, "arch", module);
+    if (ret != 0) goto aamtpm_exit;
+
+    result = true;
+
+    result &= register_python_vmpa(module);
 
-    result = (ret == 0);
+ aamtpm_exit:
 
-    if (ret != 0) /* ... */;
+    if (!result)
+    {
+        printf("something went wrong in %s...\n", __FUNCTION__);
+        /* ... */
 
-    result &= register_python_arch_instruction(module);
-    result &= register_python_arch_instruction_iterator(module);
+    }
 
-    return true;
+    return result;
 
 }
diff --git a/plugins/pychrysa/arch/module.h b/plugins/pychrysa/arch/module.h
index 8017f76..403ec8a 100644
--- a/plugins/pychrysa/arch/module.h
+++ b/plugins/pychrysa/arch/module.h
@@ -22,8 +22,8 @@
  */
 
 
-#ifndef _PLUGINS_PYOIDA_ARCH_MODULE_H
-#define _PLUGINS_PYOIDA_ARCH_MODULE_H
+#ifndef _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H
+#define _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H
 
 
 #include <Python.h>
@@ -36,4 +36,4 @@ bool add_arch_module_to_python_module(PyObject *);
 
 
 
-#endif  /* _PLUGINS_PYOIDA_ARCH_MODULE_H */
+#endif  /* _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H */
diff --git a/plugins/pychrysa/arch/vmpa.c b/plugins/pychrysa/arch/vmpa.c
new file mode 100644
index 0000000..b429699
--- /dev/null
+++ b/plugins/pychrysa/arch/vmpa.c
@@ -0,0 +1,325 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * vmpa.c - équivalent Python du fichier "arch/vmpa.c"
+ *
+ * Copyright (C) 2014 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "vmpa.h"
+
+
+#include <src/arch/vmpa.h>
+
+
+
+
+
+
+
+typedef struct _py_vmpa_t
+{
+    PyObject_HEAD
+
+    vmpa2_t addr;
+
+} py_vmpa_t;
+
+
+
+
+/* Fournit une représentation d'une variable 'vmpa_t'. */
+static PyObject *py_vmpa_to_str(PyObject *);
+
+
+
+
+/* Effectue une conversion d'un objet Python en type 'vmpa_t'. */
+static bool convert_pyobj_to_vmpa(PyObject *, vmpa2_t *);
+
+/* Effectue une opération de type 'add' avec le type 'vmpa'. */
+static PyObject *py_vmpa_nb_add(PyObject *, PyObject *);
+
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : obj = objet Python à traiter.                                *
+*                                                                             *
+*  Description : Fournit une représentation d'une variable 'vmpa_t'.          *
+*                                                                             *
+*  Retour      : Chaîne de caractère pour Python.                             *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_vmpa_to_str(PyObject *obj)
+{
+    vmpa2_t *addr;
+
+    addr = &((py_vmpa_t *)obj)->addr;
+
+    return PyUnicode_FromFormat("<phy=%d, virt=0x%08x>", addr->physical, addr->virtual);
+
+}
+
+
+
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : obj  = objet Python à tenter de convertir.                   *
+*                addr = structure équivalente pour Chrysalide.                *
+*                                                                             *
+*  Description : Effectue une conversion d'un objet Python en type 'vmpa_t'.  *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static bool convert_pyobj_to_vmpa(PyObject *obj, vmpa2_t *addr)
+{
+    bool result;                            /* Résulats à retourner        */
+    PyTypeObject *py_vmpa_type;             /* Type Python pour 'vmpa'     */
+    int ret;                                /* Bilan d'un appel            */
+    PY_LONG_LONG value;                     /* Valeur de type générique    */
+    int overflow;                           /* Détection d'une grosse val. */
+
+    result = false;
+
+    py_vmpa_type = get_python_vmpa_type();
+
+    ret = PyObject_IsInstance(obj, (PyObject *)py_vmpa_type);
+
+    /* S'il n'y a rien à faire... */
+    if (ret == 1)
+    {
+        *addr = ((py_vmpa_t *)obj)->addr;
+        result = true;
+    }
+
+    /* Sinon on demande à Python... */
+    else
+    {
+        value = PyLong_AsLongLongAndOverflow(obj, &overflow);
+
+        if (value == -1 && (overflow == 1 || PyErr_Occurred()))
+            PyErr_Clear();
+
+        else
+        {
+            init_vmpa(addr, value, value);
+            result = true;
+        }
+
+    }
+
+    return result;
+
+}
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : o1 = premier élément concerné par l'opération.               *
+*                o2 = second élément concerné par l'opération.                *
+*                                                                             *
+*  Description : Effectue une opération de type 'add' avec le type 'vmpa'.    *
+*                                                                             *
+*  Retour      : Résultat de l'opération.                                     *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_vmpa_nb_add(PyObject *o1, PyObject *o2)
+{
+    PyObject *result;                       /* Résultat à retourner        */
+    vmpa2_t addr1;                          /* Première adresse à traiter  */
+    vmpa2_t addr2;                          /* Seconde adresse à traiter   */
+    PyTypeObject *py_vmpa_type;             /* Type Python pour 'vmpa'     */
+
+    if (!convert_pyobj_to_vmpa(o1, &addr1))
+        return NULL;
+
+    if (!convert_pyobj_to_vmpa(o2, &addr2))
+        return NULL;
+
+    py_vmpa_type = get_python_vmpa_type();
+
+    result = PyObject_CallObject((PyObject *)py_vmpa_type, NULL);
+
+    init_vmpa(&((py_vmpa_t *)result)->addr,
+              addr1.physical + addr2.physical,
+              addr1.virtual + addr2.virtual);
+
+    return result;
+
+}
+
+
+
+
+void log_simple_message(/*LogMessageType*/ int type, const char *msg)
+{
+
+}
+
+
+void log_variadic_message(/*LogMessageType*/ int type, const char *fmt, ...)
+{
+
+
+}
+
+
+void change_editor_items_current_view_content(void/*GtkViewPanel*/ *view)
+{
+
+
+}
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Fournit un accès à une définition de type à diffuser.        *
+*                                                                             *
+*  Retour      : Définition d'objet pour Python.                              *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+PyTypeObject *get_python_vmpa_type(void)
+{
+    static PyNumberMethods py_vmpa_nb_proto = {
+
+        .nb_add = py_vmpa_nb_add,
+
+        /*
+     binaryfunc nb_add;
+     binaryfunc nb_subtract;
+     binaryfunc nb_multiply;
+     binaryfunc nb_remainder;
+     binaryfunc nb_divmod;
+     ternaryfunc nb_power;
+     unaryfunc nb_negative;
+     unaryfunc nb_positive;
+     unaryfunc nb_absolute;
+     inquiry nb_bool;
+     unaryfunc nb_invert;
+     binaryfunc nb_lshift;
+     binaryfunc nb_rshift;
+     binaryfunc nb_and;
+     binaryfunc nb_xor;
+     binaryfunc nb_or;
+     unaryfunc nb_int;
+     void *nb_reserved;
+     unaryfunc nb_float;
+
+     binaryfunc nb_inplace_add;
+     binaryfunc nb_inplace_subtract;
+     binaryfunc nb_inplace_multiply;
+     binaryfunc nb_inplace_remainder;
+     ternaryfunc nb_inplace_power;
+     binaryfunc nb_inplace_lshift;
+     binaryfunc nb_inplace_rshift;
+     binaryfunc nb_inplace_and;
+     binaryfunc nb_inplace_xor;
+     binaryfunc nb_inplace_or;
+
+     binaryfunc nb_floor_divide;
+     binaryfunc nb_true_divide;
+     binaryfunc nb_inplace_floor_divide;
+     binaryfunc nb_inplace_true_divide;
+
+     unaryfunc nb_index;
+
+        */
+
+    };
+
+    static PyTypeObject py_vmpa_type = {
+
+        PyVarObject_HEAD_INIT(NULL, 0)
+
+        .tp_name = "pychrysalide.arch.vmpa",
+        .tp_basicsize = sizeof(py_vmpa_t),
+
+        .tp_as_number = &py_vmpa_nb_proto,
+
+        .tp_str = py_vmpa_to_str,
+
+        .tp_flags = Py_TPFLAGS_DEFAULT,
+
+        .tp_doc = "Python object for vmpa_t"
+
+    };
+
+    return &py_vmpa_type;
+
+}
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : module = module dont la définition est à compléter.          *
+*                                                                             *
+*  Description : Prend en charge l'objet 'pychrysalide.arch.vmpa'.            *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool register_python_vmpa(PyObject *module)
+{
+    PyTypeObject *py_vmpa_type;             /* Type Python pour 'vmpa'     */
+    int ret;                                /* Bilan d'un appel            */
+
+    py_vmpa_type = get_python_vmpa_type();
+
+    py_vmpa_type->tp_new = PyType_GenericNew;
+
+    if (PyType_Ready(py_vmpa_type) != 0)
+        return false;
+
+    Py_INCREF(py_vmpa_type);
+    ret = PyModule_AddObject(module, "vmpa", (PyObject *)py_vmpa_type);
+
+    return (ret == 0);
+
+}
diff --git a/plugins/pychrysa/arch/vmpa.h b/plugins/pychrysa/arch/vmpa.h
new file mode 100644
index 0000000..6ee00b2
--- /dev/null
+++ b/plugins/pychrysa/arch/vmpa.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * vmpa.h - prototypes pour l'équivalent Python du fichier "arch/vmpa.h"
+ *
+ * Copyright (C) 2014 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#ifndef _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H
+#define _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_vmpa_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.arch.vmpa'. */
+bool register_python_vmpa(PyObject *);
+
+
+
+#endif  /* _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H */
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;
+
+}
diff --git a/plugins/pychrysa/pychrysa.h b/plugins/pychrysa/pychrysa.h
index 5897abe..0fdc074 100644
--- a/plugins/pychrysa/pychrysa.h
+++ b/plugins/pychrysa/pychrysa.h
@@ -25,7 +25,23 @@
 #define _PLUGINS_PYCHRYSA_H
 
 
+/**
+ * Note:
+ * Since Python may define some pre-processor definitions which affect the standard headers
+ * on some systems, you must include Python.h before any standard headers are included.
+ *
+ * cf. https://docs.python.org/3.4/c-api/intro.html
+ */
 #include <Python.h>
+
+
+
+
+
+
+#if 0
+
+
 #include <glib-object.h>
 #include <stdbool.h>
 
@@ -50,7 +66,8 @@ PluginAction get_plugin_action(const GPluginModule *);
 #if PY_VERSION_HEX >= 0x03000000
 
 /* Point d'entrée pour l'initialisation de Python. */
-PyMODINIT_FUNC PyInit_pychrysa(void);
+//PyMODINIT_FUNC PyInit_pychrysa(void);
+PyMODINIT_FUNC initpychrysa(void);
 
 #else
 
@@ -59,6 +76,14 @@ PyMODINIT_FUNC initpychrysa(void);
 
 #endif
 
+#endif
+
+
+
+
+/* Point d'entrée pour l'initialisation de Python. */
+PyMODINIT_FUNC PyInit_pychrysalide(void);
+
 
 
 #endif  /* _PLUGINS_PYCHRYSA_H */
diff --git a/plugins/pychrysa/quirks.c b/plugins/pychrysa/quirks.c
index 64d7bf2..4aa8536 100644
--- a/plugins/pychrysa/quirks.c
+++ b/plugins/pychrysa/quirks.c
@@ -26,7 +26,7 @@
 
 
 
-#include <pyglib.h>
+//#include <pyglib.h>
 #include <pygobject.h>
 
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d51c766..a8ebdcc 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,296 +1,344 @@
-src/plugins/plugin.c
-src/plugins/pglist.c
-src/plugins/pyoida/py_log.c
-src/plugins/pyoida/py_binary.c
-src/plugins/pyoida/pyoida.c
-src/plugins/pyoida/py_line.c
 src/plugins/context.c
+src/plugins/pglist.c
+src/plugins/plugin.c
 src/plugins/overjump/overjump.c
-src/debug/jdwp/tcp.c
-src/debug/jdwp/sets/list.c
-src/debug/jdwp/sets/vm.c
-src/debug/jdwp/sets/thread.c
-src/debug/jdwp/packet.c
-src/debug/jdwp/misc/location.c
-src/debug/jdwp/misc/id.c
-src/debug/jdwp/misc/header.c
-src/debug/jdwp/misc/types.c
-src/debug/jdwp/debugger.c
-src/debug/break.c
-src/debug/packet.c
-src/debug/stream.c
-src/debug/remgdb/tcp.c
-src/debug/remgdb/helpers.c
-src/debug/remgdb/packet.c
-src/debug/remgdb/stream.c
-src/debug/remgdb/gdb.c
-src/debug/debugger.c
-src/analysis/decomp/decompiler.c
-src/analysis/line_prologue.c
-src/analysis/routine.c
-src/analysis/binary.c
-src/analysis/line.c
-src/analysis/variable.c
-src/analysis/line_comment.c
-src/analysis/type.c
-src/analysis/line_code.c
-src/analysis/disass/output.c
-src/analysis/disass/fetch.c
-src/analysis/disass/links.c
-src/analysis/disass/disassembler.c
-src/analysis/exporter.c
-src/analysis/roptions.c
-src/dialogs/plugins.c
-src/dialogs/about.c
-src/dialogs/binparts.c
-src/dialogs/add_shellcode.c
-src/dialogs/export.c
-src/xdg.c
-src/decomp/output.c
-src/decomp/expr/cond.c
-src/decomp/expr/return.c
-src/decomp/expr/pseudo.c
-src/decomp/expr/array.c
-src/decomp/expr/dalvik/array.c
-src/decomp/expr/assign.c
-src/decomp/expr/immediate.c
-src/decomp/expr/arithm.c
-src/decomp/expr/call.c
-src/decomp/expr/block.c
-src/decomp/instruction.c
-src/decomp/instr/ite.c
-src/decomp/context.c
-src/decomp/expression.c
-src/decomp/lang/java.c
-src/decomp/lang/asm.c
-src/panel/panels.c
-src/panel/log.c
-src/panel/symbols.c
-src/panel/strings.c
-src/panel/registers.c
-src/glibext/gbufferline.c
-src/glibext/gcodebuffer.c
-src/glibext/delayed.c
-src/glibext/gnhash.c
-src/glibext/gbuffersegment.c
-src/dlg_sections.c
-src/gui/editem.c
-src/gui/menus/file.c
-src/gui/menus/view.c
-src/gui/menus/binary.c
-src/gui/menus/menubar.c
-src/gui/menus/help.c
-src/gui/menus/project.c
-src/gui/menus/debug.c
-src/gui/panels/log.c
-src/gui/panels/symbols.c
-src/gui/panels/panel.c
-src/gui/tb/toolbar.c
-src/gui/tb/source.c
-src/configuration.c
-src/format/dwarf/dwarf.c
-src/format/dwarf/abbrev.c
-src/format/dwarf/utils.c
-src/format/dwarf/info.c
-src/format/dwarf/d_dwarf.c
-src/format/elf/section.c
-src/format/elf/elf.c
-src/format/elf/helper_x86.c
-src/format/elf/symbols.c
-src/format/elf/helper_mips.c
-src/format/elf/strings.c
-src/format/elf/program.c
-src/format/elf/elf-int.c
-src/format/executable.c
-src/format/mangling/libjavamangling_la-java_tok.c
-src/format/mangling/itanium_gram.c
-src/format/mangling/demangler.c
-src/format/mangling/context.c
-src/format/mangling/libjavamangling_la-java_gram.c
-src/format/mangling/itanium_tok.c
-src/format/symbol.c
-src/format/exe_format.c
-src/format/part.c
-src/format/java/java-int.c
-src/format/java/e_java.c
-src/format/java/java.c
-src/format/java/method.c
-src/format/java/pool.c
-src/format/java/field.c
-src/format/java/attribute.c
-src/format/dex/dex.c
-src/format/dex/method.c
-src/format/dex/pool.c
-src/format/dex/class.c
-src/format/dex/dex-int.c
-src/format/format.c
-src/format/dbg_format.c
-src/format/pe/pe-int.c
-src/format/pe/section.c
-src/format/pe/symbols.c
-src/format/pe/pe.c
+src/common/net.c
 src/common/xml.c
+src/common/fnv1a.c
+src/common/endianness.c
+src/common/xdg.c
+src/common/io.c
 src/common/leb128.c
+src/common/dllist.c
 src/common/extstr.c
 src/common/environment.c
-src/common/net.c
-src/common/endianness.c
-src/common/dllist.c
-src/editor.c
-src/main.c
-src/params.c
-src/project.c
-src/graph/node.c
-src/graph/layout.c
-src/graph/dot.c
-src/panels/glimpse.c
-src/panels/breaks.c
-src/panels/strings.c
-src/panels/panel.c
-src/panels/registers.c
-src/arch/artificial.c
+src/arch/processor.c
 src/arch/operand.c
-src/arch/x86/op_movs.c
-src/arch/x86/op_hlt.c
-src/arch/x86/operand.c
-src/arch/x86/op_jump.c
-src/arch/x86/op_xor.c
-src/arch/x86/op_stos.c
-src/arch/x86/op_mov.c
-src/arch/x86/op_scas.c
-src/arch/x86/op_push.c
-src/arch/x86/op_sbb.c
-src/arch/x86/op_nop.c
-src/arch/x86/op_not.c
-src/arch/x86/op_test.c
-src/arch/x86/op_dec.c
-src/arch/x86/op_call.c
-src/arch/x86/op_shl.c
-src/arch/x86/op_or.c
-src/arch/x86/op_rcr.c
-src/arch/x86/instruction.c
-src/arch/x86/op_cld.c
-src/arch/x86/op_sar.c
-src/arch/x86/op_ror.c
-src/arch/x86/op_inc.c
-src/arch/x86/op_ret.c
-src/arch/x86/op_cmps.c
-src/arch/x86/op_shr.c
-src/arch/x86/op_arpl.c
-src/arch/x86/processor.c
-src/arch/x86/op_lea.c
-src/arch/x86/op_set.c
-src/arch/x86/op_rol.c
-src/arch/x86/op_int.c
-src/arch/x86/registers.c
-src/arch/x86/op_pop.c
-src/arch/x86/op_add.c
-src/arch/x86/op_cmp.c
-src/arch/x86/op_adc.c
-src/arch/x86/op_xchg.c
-src/arch/x86/op_mul.c
-src/arch/x86/op_and.c
-src/arch/x86/op_rcl.c
-src/arch/x86/op_movsx.c
-src/arch/x86/op_sub.c
-src/arch/x86/op_movzx.c
-src/arch/x86/op_leave.c
+src/arch/context.c
+src/arch/register.c
+src/arch/archbase.c
+src/arch/dalvik/processor.c
 src/arch/dalvik/operand.c
-src/arch/dalvik/decomp/aget.c
-src/arch/dalvik/decomp/aput.c
-src/arch/dalvik/decomp/array.c
-src/arch/dalvik/decomp/const.c
-src/arch/dalvik/decomp/if.c
-src/arch/dalvik/decomp/arithm.c
-src/arch/dalvik/decomp/ret.c
-src/arch/dalvik/decomp/invoke.c
-src/arch/dalvik/opcodes/mul.c
+src/arch/dalvik/pseudo/switch.c
+src/arch/dalvik/pseudo/fill.c
+src/arch/dalvik/context.c
+src/arch/dalvik/register.c
+src/arch/dalvik/opcodes/ret.c
 src/arch/dalvik/opcodes/check.c
-src/arch/dalvik/opcodes/xor.c
-src/arch/dalvik/opcodes/aget.c
-src/arch/dalvik/opcodes/aput.c
+src/arch/dalvik/opcodes/div.c
+src/arch/dalvik/opcodes/shr.c
+src/arch/dalvik/opcodes/rsub.c
 src/arch/dalvik/opcodes/array.c
-src/arch/dalvik/opcodes/rem.c
-src/arch/dalvik/opcodes/or.c
-src/arch/dalvik/opcodes/sput.c
+src/arch/dalvik/opcodes/const.c
 src/arch/dalvik/opcodes/switch.c
-src/arch/dalvik/opcodes/add.c
-src/arch/dalvik/opcodes/rsub.c
-src/arch/dalvik/opcodes/iget.c
-src/arch/dalvik/opcodes/sub.c
-src/arch/dalvik/opcodes/cmp.c
+src/arch/dalvik/opcodes/iput.c
 src/arch/dalvik/opcodes/sget.c
+src/arch/dalvik/opcodes/or.c
 src/arch/dalvik/opcodes/new.c
-src/arch/dalvik/opcodes/to.c
+src/arch/dalvik/opcodes/aput.c
+src/arch/dalvik/opcodes/xor.c
+src/arch/dalvik/opcodes/iget.c
+src/arch/dalvik/opcodes/nop.c
 src/arch/dalvik/opcodes/goto.c
-src/arch/dalvik/opcodes/const.c
+src/arch/dalvik/opcodes/aget.c
+src/arch/dalvik/opcodes/ushr.c
+src/arch/dalvik/opcodes/cmp.c
+src/arch/dalvik/opcodes/monitor.c
+src/arch/dalvik/opcodes/rem.c
+src/arch/dalvik/opcodes/to.c
 src/arch/dalvik/opcodes/and.c
-src/arch/dalvik/opcodes/shr.c
-src/arch/dalvik/opcodes/shl.c
-src/arch/dalvik/opcodes/iput.c
+src/arch/dalvik/opcodes/instanceof.c
 src/arch/dalvik/opcodes/if.c
-src/arch/dalvik/opcodes/move.c
-src/arch/dalvik/opcodes/ret.c
-src/arch/dalvik/opcodes/nop.c
-src/arch/dalvik/opcodes/div.c
-src/arch/dalvik/opcodes/ushr.c
+src/arch/dalvik/opcodes/mul.c
+src/arch/dalvik/opcodes/throw.c
+src/arch/dalvik/opcodes/sput.c
+src/arch/dalvik/opcodes/add.c
+src/arch/dalvik/opcodes/shl.c
 src/arch/dalvik/opcodes/invoke.c
+src/arch/dalvik/opcodes/not.c
+src/arch/dalvik/opcodes/move.c
+src/arch/dalvik/opcodes/sub.c
+src/arch/dalvik/opcodes/neg.c
+src/arch/dalvik/decomp/ret.c
+src/arch/dalvik/decomp/array.c
+src/arch/dalvik/decomp/const.c
+src/arch/dalvik/decomp/switch.c
+src/arch/dalvik/decomp/iput.c
+src/arch/dalvik/decomp/new.c
+src/arch/dalvik/decomp/aput.c
+src/arch/dalvik/decomp/iget.c
+src/arch/dalvik/decomp/aget.c
+src/arch/dalvik/decomp/arithm.c
+src/arch/dalvik/decomp/if.c
+src/arch/dalvik/decomp/invoke.c
+src/arch/dalvik/decomp/move.c
 src/arch/dalvik/instruction.c
-src/arch/dalvik/pseudo/switch.c
-src/arch/dalvik/pseudo/fill.c
-src/arch/dalvik/register.c
-src/arch/dalvik/processor.c
-src/arch/dalvik/operands/args.c
 src/arch/dalvik/operands/target.c
 src/arch/dalvik/operands/register.c
 src/arch/dalvik/operands/pool.c
-src/arch/dalvik/context.c
-src/arch/mips/operand.c
-src/arch/mips/op_jump.c
-src/arch/mips/op_nop.c
-src/arch/mips/instruction.c
-src/arch/mips/op_branch.c
-src/arch/mips/op_store.c
-src/arch/mips/processor.c
-src/arch/mips/registers.c
-src/arch/mips/op_load.c
-src/arch/mips/op_add.c
-src/arch/mips/op_sr.c
-src/arch/mips/op_and.c
-src/arch/mips/op_sub.c
-src/arch/instruction.c
-src/arch/archbase.c
-src/arch/jvm/operand.c
+src/arch/dalvik/operands/args.c
+src/arch/immediate.c
+src/arch/arm/processor.c
+src/arch/arm/v456/register.c
+src/arch/arm/v456/addressing.c
+src/arch/arm/v456/instruction.c
+src/arch/arm/v456/operands/register.c
+src/arch/arm/v456/operands/content.c
+src/arch/arm/instruction.c
+src/arch/jvm/processor.c
 src/arch/jvm/op_const.c
+src/arch/jvm/op_add.c
+src/arch/jvm/op_pop.c
+src/arch/jvm/operand.c
+src/arch/jvm/op_monitor.c
+src/arch/jvm/op_store.c
 src/arch/jvm/op_dup.c
+src/arch/jvm/op_getput.c
+src/arch/jvm/op_invoke.c
+src/arch/jvm/op_load.c
+src/arch/jvm/op_convert.c
 src/arch/jvm/op_nop.c
 src/arch/jvm/instruction.c
-src/arch/jvm/op_convert.c
-src/arch/jvm/op_getput.c
-src/arch/jvm/op_store.c
 src/arch/jvm/op_ret.c
-src/arch/jvm/processor.c
-src/arch/jvm/op_pop.c
-src/arch/jvm/op_load.c
-src/arch/jvm/op_add.c
-src/arch/jvm/op_invoke.c
-src/arch/jvm/op_monitor.c
-src/arch/immediate.c
-src/arch/processor.c
-src/arch/context.c
-src/arch/arm/processor.c
-src/gtkext/gtkbinview.c
-src/gtkext/gtkdropwindow.c
-src/gtkext/gtkdockitem.c
-src/gtkext/gtkviewpanel.c
-src/gtkext/easygtk.c
+src/arch/artificial.c
+src/arch/instruction.c
+src/arch/mips/processor.c
+src/arch/mips/op_add.c
+src/arch/mips/operand.c
+src/arch/mips/op_store.c
+src/arch/mips/op_sub.c
+src/arch/mips/op_sr.c
+src/arch/mips/op_branch.c
+src/arch/mips/op_load.c
+src/arch/mips/op_nop.c
+src/arch/mips/instruction.c
+src/arch/mips/registers.c
+src/arch/mips/op_jump.c
+src/arch/mips/op_and.c
+src/arch/x86/processor.c
+src/arch/x86/operand.c
+src/arch/x86/register.c
+src/arch/x86/opcodes/ret.c
+src/arch/x86/opcodes/shr.c
+src/arch/x86/opcodes/cld.c
+src/arch/x86/opcodes/set.c
+src/arch/x86/opcodes/movsx.c
+src/arch/x86/opcodes/stos.c
+src/arch/x86/opcodes/movzx.c
+src/arch/x86/opcodes/rcr.c
+src/arch/x86/opcodes/pop.c
+src/arch/x86/opcodes/push.c
+src/arch/x86/opcodes/int.c
+src/arch/x86/opcodes/lea.c
+src/arch/x86/opcodes/dec.c
+src/arch/x86/opcodes/or.c
+src/arch/x86/opcodes/rcl.c
+src/arch/x86/opcodes/sbb.c
+src/arch/x86/opcodes/cmps.c
+src/arch/x86/opcodes/xor.c
+src/arch/x86/opcodes/test.c
+src/arch/x86/opcodes/nop.c
+src/arch/x86/opcodes/jump.c
+src/arch/x86/opcodes/ror.c
+src/arch/x86/opcodes/sar.c
+src/arch/x86/opcodes/mov.c
+src/arch/x86/opcodes/hlt.c
+src/arch/x86/opcodes/cmp.c
+src/arch/x86/opcodes/and.c
+src/arch/x86/opcodes/adc.c
+src/arch/x86/opcodes/scas.c
+src/arch/x86/opcodes/mul.c
+src/arch/x86/opcodes/arpl.c
+src/arch/x86/opcodes/rol.c
+src/arch/x86/opcodes/call.c
+src/arch/x86/opcodes/movs.c
+src/arch/x86/opcodes/add.c
+src/arch/x86/opcodes/leave.c
+src/arch/x86/opcodes/shl.c
+src/arch/x86/opcodes/not.c
+src/arch/x86/opcodes/inc.c
+src/arch/x86/opcodes/xchg.c
+src/arch/x86/opcodes/sub.c
+src/arch/x86/instruction.c
+src/arch/x86/operands/register.c
+src/arch/x86/operands/relative.c
+src/arch/x86/operands/moffs.c
+src/arch/x86/operands/modrm.c
+src/arch/x86/operands/data.c
+src/gui/tb/source.c
+src/gui/tb/portions.c
+src/gui/tb/toolbar.c
+src/gui/panels/panel.c
+src/gui/panels/symbols.c
+src/gui/panels/glance.c
+src/gui/panels/welcome.c
+src/gui/panels/strings.c
+src/gui/panels/log.c
+src/gui/status.c
+src/gui/editem.c
+src/gui/menus/binary.c
+src/gui/menus/debug.c
+src/gui/menus/help.c
+src/gui/menus/edition.c
+src/gui/menus/view.c
+src/gui/menus/menubar.c
+src/gui/menus/file.c
+src/gui/menus/project.c
+src/glibext/gbuffersegment.c
+src/glibext/gbinportion.c
+src/glibext/gcodebuffer.c
+src/glibext/chrysamarshal.c
+src/glibext/delayed.c
+src/glibext/gbufferline.c
+src/glibext/gnhash.c
+src/panels/breaks.c
+src/panels/panel.c
+src/panels/strings.c
+src/panels/registers.c
+src/params.c
+src/debug/break.c
+src/debug/packet.c
+src/debug/remgdb/packet.c
+src/debug/remgdb/helpers.c
+src/debug/remgdb/tcp.c
+src/debug/remgdb/stream.c
+src/debug/remgdb/gdb.c
+src/debug/jdwp/packet.c
+src/debug/jdwp/sets/thread.c
+src/debug/jdwp/sets/vm.c
+src/debug/jdwp/sets/list.c
+src/debug/jdwp/tcp.c
+src/debug/jdwp/debugger.c
+src/debug/jdwp/misc/header.c
+src/debug/jdwp/misc/id.c
+src/debug/jdwp/misc/location.c
+src/debug/jdwp/misc/types.c
+src/debug/stream.c
+src/debug/debugger.c
+src/decomp/instr/keyword.c
+src/decomp/instr/switch.c
+src/decomp/instr/ite.c
+src/decomp/context.c
+src/decomp/expression.c
+src/decomp/output.c
+src/decomp/instruction.c
+src/decomp/lang/java.c
+src/decomp/lang/asm.c
+src/decomp/expr/array.c
+src/decomp/expr/dalvik/array.c
+src/decomp/expr/access.c
+src/decomp/expr/immediate.c
+src/decomp/expr/cond.c
+src/decomp/expr/assign.c
+src/decomp/expr/pseudo.c
+src/decomp/expr/arithm.c
+src/decomp/expr/block.c
+src/decomp/expr/call.c
+src/decomp/expr/text.c
+src/decomp/expr/return.c
+src/decomp/expr/comp.c
+src/format/dwarf/abbrev.c
+src/format/dwarf/dwarf.c
+src/format/dwarf/utils.c
+src/format/dwarf/info.c
+src/format/dwarf/d_dwarf.c
+src/format/mangling/context.c
+src/format/mangling/demangler.c
+src/format/mangling/libjavamangling_la-java_gram.c
+src/format/mangling/itanium/abi.c
+src/format/mangling/itanium/context.c
+src/format/mangling/itanium/component.c
+src/format/mangling/libjavamangling_la-java_tok.c
+src/format/executable.c
+src/format/part.c
+src/format/dbg_format.c
+src/format/pe/pe.c
+src/format/pe/symbols.c
+src/format/pe/section.c
+src/format/pe/pe-int.c
+src/format/exe_format.c
+src/format/symbol.c
+src/format/dex/method.c
+src/format/dex/dex.c
+src/format/dex/dex-int.c
+src/format/dex/pool.c
+src/format/dex/class.c
+src/format/elf/program.c
+src/format/elf/helper_mips.c
+src/format/elf/symbols.c
+src/format/elf/elf.c
+src/format/elf/elf-int.c
+src/format/elf/section.c
+src/format/elf/strings.c
+src/format/elf/helper_x86.c
+src/format/format.c
+src/format/java/attribute.c
+src/format/java/field.c
+src/format/java/method.c
+src/format/java/java.c
+src/format/java/e_java.c
+src/format/java/pool.c
+src/format/java/java-int.c
+src/dlg_sections.c
+src/analysis/binary.c
+src/analysis/disass/rank.c
+src/analysis/disass/output.c
+src/analysis/disass/macro.c
+src/analysis/disass/loop.c
+src/analysis/disass/fetch.c
+src/analysis/disass/limit.c
+src/analysis/disass/links.c
+src/analysis/disass/disassembler.c
+src/analysis/blocks/virtual.c
+src/analysis/blocks/raccess.c
+src/analysis/blocks/flow.c
+src/analysis/decomp/decompiler.c
+src/analysis/decomp/il.c
+src/analysis/decomp/cmerge.c
+src/analysis/decomp/reduce.c
+src/analysis/type.c
+src/analysis/db/collection.c
+src/analysis/db/cdb.c
+src/analysis/db/bookmark.c
+src/analysis/db/client.c
+src/analysis/db/core.c
+src/analysis/db/server.c
+src/analysis/roptions.c
+src/analysis/block.c
+src/analysis/routine.c
+src/analysis/variable.c
+src/analysis/binaries/file.c
+src/analysis/types/encaps.c
+src/analysis/types/cse.c
+src/analysis/types/literal.c
+src/analysis/types/template.c
+src/analysis/types/basic.c
+src/dialogs/about.c
+src/dialogs/binparts.c
+src/dialogs/export.c
+src/dialogs/storage.c
+src/dialogs/goto.c
+src/dialogs/shellcode.c
+src/dialogs/plugins.c
 src/gtkext/gtkdockstation.c
+src/gtkext/gtklinkrenderer.c
+src/gtkext/easygtk.c
+src/gtkext/gtksourceview.c
+src/gtkext/gtkbinarystrip.c
+src/gtkext/gtkblockview.c
 src/gtkext/gtkbufferview.c
-src/gtkext/gtkdockpanel.c
 src/gtkext/gtkextstatusbar.c
-src/gtkext/gtkgraphview.c
-src/gtkext/gtksourceview.c
 src/gtkext/support.c
-src/gtkext/iodamarshal.c
-src/gtkext/gtkblockview.c
-src/gtkext/gtklinkrenderer.c
+src/gtkext/gtkviewpanel.c
+src/gtkext/gtkgraphview.c
+src/gtkext/graph/nodes/virtual.c
+src/gtkext/graph/nodes/flow.c
+src/gtkext/graph/ranks.c
+src/gtkext/graph/layout.c
+src/gtkext/graph/dot.c
+src/gtkext/graph/edge.c
+src/gtkext/graph/node.c
+src/main.c
+src/project.c
+src/configuration.c
+src/editor.c
diff --git a/po/fr.po b/po/fr.po
index 9530c59..8103b74 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openida 0.0.1\n"
 "Report-Msgid-Bugs-To: nocbos@gmail.com\n"
-"POT-Creation-Date: 2012-07-08 13:15+0200\n"
+"POT-Creation-Date: 2014-06-14 10:29+0200\n"
 "PO-Revision-Date: 2010-11-04 16:11+0100\n"
 "Last-Translator: cyrille <nocbos@gmail.com>\n"
 "Language-Team: French\n"
@@ -17,346 +17,224 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: src/plugins/pyoida/py_log.c:118
-msgid "Invalid type of message"
+#: src/plugins/pglist.c:283
+#, c-format
+msgid "Initialization of plugin '%s' failed !"
 msgstr ""
 
-#: src/debug/jdwp/tcp.c:191
+#: src/plugins/plugin.c:176
 #, c-format
-msgid "Error while connecting to the JDWP server at %s:%s."
-msgstr "Erreur lors de la connexion au serveur JDWP sur %s:%s."
+msgid "Error while loading the plugin candidate '%s' : %s"
+msgstr ""
 
-#: src/debug/jdwp/tcp.c:197
+#: src/plugins/plugin.c:184
 #, c-format
-msgid "Connected to %s:%hd."
-msgstr "Connecté à  %s:%hd."
-
-#: src/debug/jdwp/tcp.c:215
-msgid "Failure in the first JDWP handshake."
-msgstr "Echec des premiers échanges JDWP."
+msgid "No 'get_plugin_name' entry in plugin candidate '%s'"
+msgstr ""
 
-#: src/debug/jdwp/debugger.c:213
+#: src/plugins/plugin.c:244
 #, c-format
-msgid "The debugger is '%s' (JRE %d.%d; VM %s)."
-msgstr "Le débogueur est '%s' (JRE %d.%d ; VM %s)."
-
-#: src/analysis/decomp/decompiler.c:77
-msgid "Binary data decompiled by Chrysalide"
-msgstr "Données binaires décompilées par Chrysalide"
-
-#: src/analysis/decomp/decompiler.c:81 src/analysis/disass/disassembler.c:314
-msgid "Chrysalide is free software - © 2008-2012 Cyrille Bagard"
-msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard"
-
-#: src/analysis/decomp/decompiler.c:90
-msgid "whole binary"
+msgid "Loaded the '<b>%s</b>' from the '<b>%s</b>' directory"
 msgstr ""
 
-#: src/analysis/decomp/decompiler.c:92 src/analysis/decomp/decompiler.c:95
-#: src/analysis/disass/disassembler.c:322
-#: src/analysis/disass/disassembler.c:325 src/dialogs/export.c:311
-msgid "File: "
-msgstr "Fichier: "
-
-#: src/analysis/binary.c:357
-msgid "default"
+#: src/arch/dalvik/operands/pool.c:207 src/arch/dalvik/operands/pool.c:209
+#, c-format
+msgid "<bad string index (%d)>"
 msgstr ""
 
-#: src/analysis/binary.c:416
+#: src/arch/dalvik/operands/pool.c:234 src/arch/dalvik/operands/pool.c:236
 #, c-format
-msgid "Opening '%s' file..."
+msgid "<bad type index (%d)>"
 msgstr ""
 
-#: src/analysis/binary.c:429
-msgid "Unknown binary format"
+#: src/arch/dalvik/operands/pool.c:265 src/arch/dalvik/operands/pool.c:267
+#, c-format
+msgid "<bad field index (%d)>"
 msgstr ""
 
-#: src/analysis/binary.c:437
-msgid "Detected architecture: ARM"
+#: src/arch/dalvik/operands/pool.c:292 src/arch/dalvik/operands/pool.c:294
+#, c-format
+msgid "<bad method index (%d)>"
 msgstr ""
 
-#: src/analysis/binary.c:440
-msgid "Detected architecture: Dalvik Virtual Machine"
+#: src/gui/tb/source.c:85
+msgid " Source: "
 msgstr ""
 
-#: src/analysis/binary.c:443
-msgid "Detected architecture: Java Virtual Machine"
+#: src/gui/tb/source.c:116
+msgid "Source files"
 msgstr ""
 
-#: src/analysis/binary.c:446
-msgid ""
-"Detected architecture: Microprocessor without Interlocked Pipeline Stages"
+#: src/gui/tb/portions.c:132
+msgid "Portions"
 msgstr ""
 
-#: src/analysis/binary.c:449
-msgid "Detected architecture: i386"
+#: src/gui/panels/symbols.c:218
+msgid "List"
 msgstr ""
 
-#: src/analysis/binary.c:452
-msgid "Unknown architecture"
+#: src/gui/panels/symbols.c:221
+msgid "Show symbols using a list view"
 msgstr ""
 
-#: src/analysis/binary.c:1265 src/analysis/binary.c:1268
-msgid "Group"
+#: src/gui/panels/symbols.c:224
+msgid "Tree"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:215
-msgid "Disassembling..."
+#: src/gui/panels/symbols.c:227
+msgid "Show symbols using a tree view"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:234
-#, c-format
-msgid "Disassembled instructions : %u %% (%u / %d)"
+#: src/gui/panels/symbols.c:234
+msgid "Collapse"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:242
-msgid "Establishing links..."
+#: src/gui/panels/symbols.c:237
+msgid "Collapse all symbol nodes in the tree view"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:250
-msgid "Finding remaining limits..."
+#: src/gui/panels/symbols.c:240
+msgid "Expand"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:260
-msgid "Printing disassembled code..."
+#: src/gui/panels/symbols.c:243
+msgid "Expand all symbol nodes in the tree view"
 msgstr ""
 
-#: src/analysis/disass/disassembler.c:310
-msgid "Disassembly generated by Chrysalide"
-msgstr "Désassemblage généré par Chrysalide"
-
-#: src/analysis/disass/disassembler.c:339
-#: src/analysis/disass/disassembler.c:342
-msgid "Sha256: "
+#: src/gui/panels/symbols.c:246
+msgid "Classes"
 msgstr ""
 
-#: src/dialogs/plugins.c:106
-msgid "Plugins selection"
+#: src/gui/panels/symbols.c:249
+msgid "Show all classes in the tree view"
 msgstr ""
 
-#: src/dialogs/plugins.c:214
-msgid "Author:"
+#: src/gui/panels/symbols.c:258
+msgid "Filter symbols using POSIX extended regular expressions"
 msgstr ""
 
-#: src/dialogs/plugins.c:219
-msgid "label8"
-msgstr ""
+#: src/gui/panels/symbols.c:346
+#, fuzzy
+msgid "Binary symbols"
+msgstr "Code binaire"
 
-#: src/dialogs/plugins.c:223
-msgid "Version:"
+#: src/gui/panels/glance.c:154 src/gui/panels/glance.c:202
+msgid "Glance"
 msgstr ""
 
-#: src/dialogs/plugins.c:228
-msgid "label9"
+#: src/gui/panels/welcome.c:149
+msgid "Welcome"
 msgstr ""
 
-#: src/dialogs/plugins.c:232
-msgid "URL:"
+#: src/gui/panels/strings.c:173 src/panels/breaks.c:189
+#: src/panels/strings.c:87
+msgid "Address"
 msgstr ""
 
-#: src/dialogs/plugins.c:237
-msgid "label10"
+#: src/gui/panels/strings.c:178 src/panels/breaks.c:209
+#: src/panels/strings.c:91
+msgid "String"
 msgstr ""
 
-#: src/dialogs/plugins.c:251
-msgid "label12"
+#: src/gui/panels/strings.c:190
+msgid "Find references..."
 msgstr ""
 
-#: src/dialogs/plugins.c:256
-msgid "<b>Action</b>"
+#: src/gui/panels/strings.c:218
+msgid "Strings"
 msgstr ""
 
-#: src/dialogs/plugins.c:261
-msgid "<b>Details:</b>"
+#: src/gui/panels/log.c:71
+msgid "Misc information"
 msgstr ""
 
-#: src/dialogs/plugins.c:293
-msgid "Apply"
+#: src/gui/status.c:219
+msgid "Address "
 msgstr ""
 
-#: src/dialogs/plugins.c:314
-msgid "Cancel"
+#: src/gui/status.c:233
+msgid " at "
 msgstr ""
 
-#: src/dialogs/about.c:69 src/gui/menus/help.c:66
-msgid "About"
-msgstr "A propos"
-
-#: src/dialogs/binparts.c:138
-msgid "Content to display"
+#: src/gui/status.c:235
+msgid "+"
 msgstr ""
 
-#: src/dialogs/binparts.c:160
-msgid "Model :"
-msgstr ""
+#: src/gui/menus/binary.c:66
+msgid "_Binary"
+msgstr "_Binaire"
 
-#: src/dialogs/binparts.c:210
-msgid "Active"
+#: src/gui/menus/binary.c:72
+msgid "Storage..."
 msgstr ""
 
-#: src/dialogs/binparts.c:215
-msgid "Name"
-msgstr ""
+#: src/gui/menus/binary.c:76
+msgid "Export..."
+msgstr "Exportation..."
+
+#: src/gui/menus/debug.c:63
+msgid "_Debug"
+msgstr "_Débogage"
 
-#: src/dialogs/binparts.c:220 src/gui/menus/debug.c:69
-#: src/gui/menus/debug.c:108 src/gui/menus/debug.c:123
+#: src/gui/menus/debug.c:69 src/gui/menus/debug.c:108
+#: src/gui/menus/debug.c:123 src/dialogs/binparts.c:220
 msgid "Start"
 msgstr "Démarrer"
 
-#: src/dialogs/binparts.c:224
-msgid "End"
-msgstr ""
-
-#: src/dialogs/binparts.c:282
-msgid "Default"
-msgstr ""
-
-#: src/dialogs/binparts.c:283
-msgid "Routines"
-msgstr ""
-
-#: src/dialogs/binparts.c:284
-msgid "User"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:131
-msgid "Shellcode assistant"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:274 src/dialogs/add_shellcode.c:500
-msgid "No code"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:281 src/dialogs/add_shellcode.c:795
-msgid "Code"
-msgstr "Code"
-
-#: src/dialogs/add_shellcode.c:489
-msgid "<span color=\"red\"><b>Error while decoding</b></span>"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:493
-#, c-format
-msgid "<span color=\"#00cc00\"><b>Decoding OK (%d %s)</b></span>"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:494
-msgid "bytes"
-msgstr ""
-
-#: src/dialogs/add_shellcode.c:494
-msgid "byte"
-msgstr ""
+#: src/gui/menus/debug.c:104
+msgid "No available debug module for this binary !"
+msgstr "Pas de module de débogage disponible pour ce binaire !"
 
-#: src/dialogs/add_shellcode.c:546
-msgid "Architecture:"
-msgstr ""
+#: src/gui/menus/debug.c:112
+msgid "Failed to initialize the debugger."
+msgstr "Echec de l'initialisation du débogueur."
 
-#: src/dialogs/add_shellcode.c:552
-msgid "x86"
-msgstr ""
+#: src/gui/menus/debug.c:116
+msgid "Stop"
+msgstr "Arrêter"
 
-#: src/dialogs/add_shellcode.c:558
-msgid "Register size:"
-msgstr ""
+#: src/gui/menus/help.c:60
+msgid "_Help"
+msgstr "_Aide"
 
-#: src/dialogs/add_shellcode.c:564
-msgid "32 bits"
-msgstr ""
+#: src/gui/menus/help.c:66 src/dialogs/about.c:75
+msgid "About"
+msgstr "A propos"
 
-#: src/dialogs/add_shellcode.c:565
-msgid "16 bits"
+#: src/gui/menus/edition.c:61
+msgid "_Edition"
 msgstr ""
 
-#: src/dialogs/add_shellcode.c:572
-msgid "Architecture"
+#: src/gui/menus/edition.c:67
+msgid "Go to address..."
 msgstr ""
 
-#: src/dialogs/add_shellcode.c:629
-#, fuzzy
-msgid "Format : "
-msgstr "Format : "
-
-#: src/dialogs/add_shellcode.c:635 src/dialogs/export.c:301
-msgid "Simple text"
-msgstr "Texte simple"
-
-#: src/dialogs/add_shellcode.c:645
-#, fuzzy
-msgid "File : "
-msgstr "Fichier: "
-
-#: src/dialogs/add_shellcode.c:657 src/dialogs/export.c:323
-msgid "Output"
-msgstr "Sortie"
-
-#: src/dialogs/add_shellcode.c:723 src/dialogs/export.c:389
-msgid "Choose an output filename"
-msgstr "Choisir un fichier de sortie"
-
-#: src/dialogs/add_shellcode.c:784
-#, fuzzy
-msgid "<b>Lines to process</b>"
-msgstr "<b>Eléments à afficher</b>"
+#: src/gui/menus/view.c:70
+msgid "_View"
+msgstr "Affichage"
 
-#: src/dialogs/add_shellcode.c:791
-msgid "Prologue"
-msgstr ""
+#: src/gui/menus/view.c:76
+msgid "Text view"
+msgstr "Vue binaire"
 
-#: src/dialogs/add_shellcode.c:799
-msgid "Comments"
-msgstr ""
+#: src/gui/menus/view.c:84
+msgid "Graph view"
+msgstr "Vue graphique"
 
-#: src/dialogs/add_shellcode.c:805 src/dialogs/export.c:448
-msgid "<b>Items to display</b>"
-msgstr "<b>Eléments à afficher</b>"
+#: src/gui/menus/view.c:92
+msgid "Source code"
+msgstr "Code source"
 
-#: src/dialogs/add_shellcode.c:812 src/dialogs/export.c:455
-#: src/gui/menus/view.c:101
+#: src/gui/menus/view.c:101 src/dialogs/export.c:455
+#: src/dialogs/shellcode.c:784
 msgid "Virtual address"
 msgstr "Adresse virtuelle"
 
-#: src/dialogs/add_shellcode.c:816 src/dialogs/export.c:459
-#: src/gui/menus/view.c:105
+#: src/gui/menus/view.c:105 src/dialogs/export.c:459
+#: src/dialogs/shellcode.c:788
 msgid "Binary code"
 msgstr "Code binaire"
 
-#: src/dialogs/add_shellcode.c:820 src/dialogs/export.c:463
-msgid "Assembly code"
-msgstr "Code d'assembleur"
-
-#: src/dialogs/add_shellcode.c:827 src/dialogs/export.c:470
-msgid "Exported content"
-msgstr "Contenu exporté"
-
-#: src/dialogs/export.c:114
-msgid "Export assistant"
-msgstr "Assistant d'exportation"
-
-#: src/dialogs/export.c:213
-msgid "Exporting binary lines..."
-msgstr "Exportation des lignes binaires..."
-
-#: src/dialogs/export.c:295
-msgid "Format: "
-msgstr "Format : "
-
-#: src/panel/strings.c:87 src/panels/breaks.c:188 src/panels/strings.c:87
-msgid "Address"
-msgstr ""
-
-#: src/panel/strings.c:91 src/panels/breaks.c:208 src/panels/strings.c:91
-msgid "String"
-msgstr ""
-
-#: src/panel/registers.c:100 src/panels/registers.c:101
-msgid "Registers:"
-msgstr ""
-
-#: src/panel/registers.c:179 src/panels/registers.c:180
-msgid "Segments:"
-msgstr ""
-
 #: src/gui/menus/file.c:74
 msgid "_File"
 msgstr "_Fichier"
@@ -393,104 +271,102 @@ msgstr "Ouvrir un projet"
 msgid "Save the project as..."
 msgstr "Enregistrer le projet sous..."
 
-#: src/gui/menus/view.c:70 src/editor.c:247
-msgid "_View"
-msgstr "Affichage"
-
-#: src/gui/menus/view.c:76
-msgid "Text view"
-msgstr "Vue binaire"
-
-#: src/gui/menus/view.c:84
-msgid "Graph view"
-msgstr "Vue graphique"
-
-#: src/gui/menus/view.c:92
-msgid "Source code"
-msgstr "Code source"
-
-#: src/gui/menus/binary.c:62 src/editor.c:273
-msgid "_Binary"
-msgstr "_Binaire"
-
-#: src/gui/menus/binary.c:68
-msgid "Export..."
-msgstr "Exportation..."
-
-#: src/gui/menus/help.c:60
-msgid "_Help"
-msgstr "_Aide"
-
-#: src/gui/menus/project.c:66
+#: src/gui/menus/project.c:74
 msgid "_Project"
 msgstr ""
 
-#: src/gui/menus/project.c:72
+#: src/gui/menus/project.c:80
 msgid "Add a binary..."
 msgstr ""
 
-#: src/gui/menus/project.c:78
+#: src/gui/menus/project.c:86
+#, fuzzy
+msgid "Shellcode"
+msgstr "Code source"
+
+#: src/gui/menus/project.c:90
 #, fuzzy
 msgid "File"
 msgstr "_Fichier"
 
-#: src/gui/menus/project.c:82
+#: src/gui/menus/project.c:94
 msgid "Remove a binary"
 msgstr ""
 
-#: src/gui/menus/project.c:176
+#: src/gui/menus/project.c:209 src/gui/menus/project.c:275
 msgid "Open a binary file"
 msgstr ""
 
-#: src/gui/menus/debug.c:63 src/editor.c:287
-msgid "_Debug"
-msgstr "_Débogage"
+#: src/glibext/gbinportion.c:833
+msgid "Localisation"
+msgstr ""
 
-#: src/gui/menus/debug.c:104
-msgid "No available debug module for this binary !"
-msgstr "Pas de module de débogage disponible pour ce binaire !"
+#: src/glibext/gbinportion.c:836
+msgid "physical: from "
+msgstr ""
 
-#: src/gui/menus/debug.c:112
-msgid "Failed to initialize the debugger."
-msgstr "Echec de l'initialisation du débogueur."
+#: src/glibext/gbinportion.c:839 src/glibext/gbinportion.c:847
+msgid " to "
+msgstr ""
 
-#: src/gui/menus/debug.c:116
-msgid "Stop"
-msgstr "Arrêter"
+#: src/glibext/gbinportion.c:844
+msgid "memory: from "
+msgstr ""
 
-#: src/gui/panels/log.c:70
-msgid "Misc information"
+#: src/glibext/gbinportion.c:855
+msgid "Rights"
 msgstr ""
 
-#: src/gui/panels/symbols.c:300
-#, fuzzy
-msgid "Binary symbols"
-msgstr "Code binaire"
+#: src/panels/breaks.c:156
+msgid "Breakpoints"
+msgstr ""
 
-#: src/gui/tb/source.c:85
-msgid " Source: "
+#: src/panels/registers.c:101
+msgid "Registers:"
 msgstr ""
 
-#: src/gui/tb/source.c:116
-msgid "Source files"
+#: src/panels/registers.c:180
+msgid "Segments:"
 msgstr ""
 
+#: src/debug/jdwp/tcp.c:191
+#, c-format
+msgid "Error while connecting to the JDWP server at %s:%s."
+msgstr "Erreur lors de la connexion au serveur JDWP sur %s:%s."
+
+#: src/debug/jdwp/tcp.c:197
+#, c-format
+msgid "Connected to %s:%hd."
+msgstr "Connecté à  %s:%hd."
+
+#: src/debug/jdwp/tcp.c:215
+msgid "Failure in the first JDWP handshake."
+msgstr "Echec des premiers échanges JDWP."
+
+#: src/debug/jdwp/debugger.c:213
+#, c-format
+msgid "The debugger is '%s' (JRE %d.%d; VM %s)."
+msgstr "Le débogueur est '%s' (JRE %d.%d ; VM %s)."
+
 #: src/format/dwarf/info.c:483
 msgid "[no name]"
 msgstr ""
 
-#: src/format/elf/elf.c:182
-#, c-format
-msgid ""
-"Corrupted program header size (%hu); fixed !  --  replacing 0x%04hx by 0x"
-"%04hx at offset 0x%x"
+#: src/format/exe_format.c:242 src/format/format.c:465
+msgid "ELF"
 msgstr ""
 
-#: src/format/elf/elf.c:191
+#: src/format/exe_format.c:243 src/format/format.c:466
+msgid "Java"
+msgstr ""
+
+#: src/format/exe_format.c:244
+msgid "Portable Executable"
+msgstr ""
+
+#: src/format/exe_format.c:301 src/format/format.c:533
 #, c-format
-msgid ""
-"Corrupted section header size (%hu); fixed !  --  replacing 0x%04hx by 0x"
-"%04hx at offset 0x%x"
+msgid "%s is matching..."
 msgstr ""
 
 #: src/format/elf/symbols.c:99
@@ -501,21 +377,34 @@ msgstr ""
 msgid "Binary is statically linked"
 msgstr ""
 
-#: src/format/exe_format.c:242 src/format/format.c:487
-msgid "ELF"
+#: src/format/elf/elf.c:190
+#, c-format
+msgid ""
+"Corrupted program header size (%hu); fixed !  --  replacing 0x%04hx by 0x"
+"%04hx at offset 0x%x"
 msgstr ""
 
-#: src/format/exe_format.c:243 src/format/format.c:488
-msgid "Java"
+#: src/format/elf/elf.c:199
+#, c-format
+msgid ""
+"Corrupted section header size (%hu); fixed !  --  replacing 0x%04hx by 0x"
+"%04hx at offset 0x%x"
 msgstr ""
 
-#: src/format/exe_format.c:244
-msgid "Portable Executable"
+#: src/format/elf/elf.c:348
+msgid "Segment"
 msgstr ""
 
-#: src/format/exe_format.c:301 src/format/format.c:555
-#, c-format
-msgid "%s is matching..."
+#: src/format/elf/elf.c:395 src/format/elf/elf.c:397
+msgid "Section"
+msgstr ""
+
+#: src/format/format.c:463
+msgid "Dalvik Executable"
+msgstr ""
+
+#: src/format/format.c:467
+msgid "PE"
 msgstr ""
 
 #: src/format/java/attribute.c:239
@@ -528,110 +417,395 @@ msgstr ""
 msgid "Size indication of the attribute '%s' not verified: %d vs %d"
 msgstr ""
 
-#: src/format/format.c:485
-msgid "Dalvik Executable"
+#: src/analysis/disass/disassembler.c:212
+msgid "Disassembling..."
 msgstr ""
 
-#: src/format/format.c:489
-msgid "PE"
+#: src/analysis/disass/disassembler.c:231
+#, c-format
+msgid "Disassembled instructions : %u %% (%u / %d)"
 msgstr ""
 
-#: src/editor.c:213
-msgid "Chrysalide"
+#: src/analysis/disass/disassembler.c:241
+msgid "Establishing links..."
 msgstr ""
 
-#: src/editor.c:260
-msgid "Toolbar"
+#: src/analysis/disass/disassembler.c:251
+msgid "Finding remaining limits..."
 msgstr ""
 
-#: src/editor.c:266
-msgid "Source file"
+#: src/analysis/disass/disassembler.c:263
+msgid "Detecting loops..."
 msgstr ""
 
-#: src/editor.c:280
-msgid "Select parts..."
+#: src/analysis/disass/disassembler.c:271
+msgid "Grouping routines instructions..."
 msgstr ""
 
-#: src/editor.c:283
-msgid "Select plugins..."
+#: src/analysis/disass/disassembler.c:283
+msgid "Ranking each instructions block..."
 msgstr ""
 
-#: src/editor.c:294
-msgid "Start process"
+#: src/analysis/disass/disassembler.c:295
+msgid "Printing disassembled code..."
 msgstr ""
 
-#: src/editor.c:297
-msgid "Pause process"
+#: src/analysis/disass/disassembler.c:347
+msgid "Disassembly generated by Chrysalide"
+msgstr "Désassemblage généré par Chrysalide"
+
+#: src/analysis/disass/disassembler.c:351
+#, fuzzy
+msgid "Chrysalide is free software - © 2008-2014 Cyrille Bagard"
+msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard"
+
+#: src/analysis/disass/disassembler.c:359
+#: src/analysis/disass/disassembler.c:362 src/analysis/decomp/decompiler.c:96
+#: src/analysis/decomp/decompiler.c:99 src/dialogs/export.c:311
+msgid "File: "
+msgstr "Fichier: "
+
+#: src/analysis/disass/disassembler.c:376
+#: src/analysis/disass/disassembler.c:379
+msgid "Sha256: "
 msgstr ""
 
-#: src/editor.c:300
-msgid "Resume process"
+#: src/analysis/decomp/decompiler.c:81
+msgid "Binary data decompiled by Chrysalide"
+msgstr "Données binaires décompilées par Chrysalide"
+
+#: src/analysis/decomp/decompiler.c:85
+msgid "Chrysalide is free software - © 2008-2012 Cyrille Bagard"
+msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard"
+
+#: src/analysis/decomp/decompiler.c:94
+msgid "whole binary"
 msgstr ""
 
-#: src/editor.c:303
-msgid "Kill process"
+#: src/analysis/db/server.c:390
+#, c-format
+msgid "Server started and listening at %s:%hu"
 msgstr ""
 
-#: src/editor.c:309
-msgid "Step into"
+#: src/analysis/binaries/file.c:171
+#, c-format
+msgid "Opening '%s' file..."
 msgstr ""
 
-#: src/editor.c:312
-msgid "Step over"
+#: src/analysis/binaries/file.c:215
+msgid "Unknown binary format"
 msgstr ""
 
-#: src/editor.c:315
-msgid "Run until ret"
+#: src/analysis/binaries/file.c:222
+msgid "Detected architecture: ARM"
 msgstr ""
 
-#: src/editor.c:397
-msgid "Registers"
+#: src/analysis/binaries/file.c:225
+msgid "Detected architecture: Dalvik Virtual Machine"
 msgstr ""
 
-#: src/editor.c:417
-msgid "Strings"
+#: src/analysis/binaries/file.c:228
+msgid "Detected architecture: Java Virtual Machine"
 msgstr ""
 
-#: src/editor.c:510
-msgid "The current project will be lost. Do you you want to save it ?"
+#: src/analysis/binaries/file.c:231
+msgid ""
+"Detected architecture: Microprocessor without Interlocked Pipeline Stages"
 msgstr ""
 
-#: src/main.c:64
-#, c-format
-msgid "Last compiled on %s at %s\n"
+#: src/analysis/binaries/file.c:234
+msgid "Detected architecture: i386"
 msgstr ""
 
-#: src/main.c:68
-#, c-format
-msgid "Data directory: %s\n"
+#: src/analysis/binaries/file.c:237
+msgid "Unknown architecture"
 msgstr ""
 
-#: src/main.c:69
-#, c-format
-msgid "Plugins directory: %s\n"
+#: src/dialogs/binparts.c:138
+msgid "Content to display"
+msgstr ""
+
+#: src/dialogs/binparts.c:160
+msgid "Model :"
+msgstr ""
+
+#: src/dialogs/binparts.c:210
+msgid "Active"
+msgstr ""
+
+#: src/dialogs/binparts.c:215
+msgid "Name"
+msgstr ""
+
+#: src/dialogs/binparts.c:224
+msgid "End"
+msgstr ""
+
+#: src/dialogs/binparts.c:282
+msgid "Default"
+msgstr ""
+
+#: src/dialogs/binparts.c:283
+msgid "Routines"
+msgstr ""
+
+#: src/dialogs/binparts.c:284
+msgid "User"
+msgstr ""
+
+#: src/dialogs/export.c:114
+msgid "Export assistant"
+msgstr "Assistant d'exportation"
+
+#: src/dialogs/export.c:213
+msgid "Exporting binary lines..."
+msgstr "Exportation des lignes binaires..."
+
+#: src/dialogs/export.c:295
+msgid "Format: "
+msgstr "Format : "
+
+#: src/dialogs/export.c:301 src/dialogs/shellcode.c:607
+msgid "Simple text"
+msgstr "Texte simple"
+
+#: src/dialogs/export.c:323 src/dialogs/shellcode.c:629
+msgid "Output"
+msgstr "Sortie"
+
+#: src/dialogs/export.c:389 src/dialogs/shellcode.c:695
+msgid "Choose an output filename"
+msgstr "Choisir un fichier de sortie"
+
+#: src/dialogs/export.c:448 src/dialogs/shellcode.c:777
+msgid "<b>Items to display</b>"
+msgstr "<b>Eléments à afficher</b>"
+
+#: src/dialogs/export.c:463 src/dialogs/shellcode.c:792
+msgid "Assembly code"
+msgstr "Code d'assembleur"
+
+#: src/dialogs/export.c:470 src/dialogs/shellcode.c:799
+msgid "Exported content"
+msgstr "Contenu exporté"
+
+#: src/dialogs/storage.c:139
+msgid "Features"
+msgstr ""
+
+#: src/dialogs/storage.c:149 src/dialogs/storage.c:564
+msgid "Local storage"
+msgstr ""
+
+#: src/dialogs/storage.c:151 src/dialogs/storage.c:567
+#: src/dialogs/storage.c:621
+msgid "Remote storage"
+msgstr ""
+
+#: src/dialogs/storage.c:153 src/dialogs/storage.c:570
+#: src/dialogs/storage.c:623
+msgid "Local storage with remote access"
+msgstr ""
+
+#: src/dialogs/storage.c:160 src/dialogs/storage.c:201
+msgid "Storage"
+msgstr ""
+
+#: src/dialogs/storage.c:222
+#, fuzzy
+msgid "<b>Identity</b>"
+msgstr "<b>Eléments à afficher</b>"
+
+#: src/dialogs/storage.c:229
+msgid "Username: "
+msgstr ""
+
+#: src/dialogs/storage.c:237
+msgid "<b>Server to contact</b>"
+msgstr ""
+
+#: src/dialogs/storage.c:245
+msgid "Use a remote server:"
+msgstr ""
+
+#: src/dialogs/storage.c:254
+msgid "Host: "
+msgstr ""
+
+#: src/dialogs/storage.c:261
+msgid "Port:"
+msgstr ""
+
+#: src/dialogs/storage.c:549 src/dialogs/shellcode.c:771
+msgid "Comments"
+msgstr ""
+
+#: src/dialogs/storage.c:552
+msgid "Segments display"
+msgstr ""
+
+#: src/dialogs/storage.c:555
+msgid "Bookmarks"
+msgstr ""
+
+#: src/dialogs/goto.c:155
+#, fuzzy
+msgid "Go to address"
+msgstr "Adresse virtuelle"
+
+#: src/dialogs/goto.c:168
+msgid "Enter the value of the target address:"
+msgstr ""
+
+#: src/dialogs/shellcode.c:131
+msgid "Shellcode assistant"
+msgstr ""
+
+#: src/dialogs/shellcode.c:262
+msgid ""
+"Paste here the raw C code containing the shellcode.\r\n"
+"All content between quotes will be extracted."
+msgstr ""
+
+#: src/dialogs/shellcode.c:279 src/dialogs/shellcode.c:461
+msgid "No code"
+msgstr ""
+
+#: src/dialogs/shellcode.c:286 src/dialogs/shellcode.c:767
+msgid "Code"
+msgstr "Code"
+
+#: src/dialogs/shellcode.c:448
+msgid "<span color=\"red\"><b>Error while decoding</b></span>"
+msgstr ""
+
+#: src/dialogs/shellcode.c:452
+msgid "<span color=\"#00cc00\"><b>Decoding OK ("
+msgstr ""
+
+#: src/dialogs/shellcode.c:454
+msgid "bytes"
+msgstr ""
+
+#: src/dialogs/shellcode.c:454
+msgid "byte"
+msgstr ""
+
+#: src/dialogs/shellcode.c:518
+msgid "Architecture:"
+msgstr ""
+
+#: src/dialogs/shellcode.c:524
+msgid "x86"
+msgstr ""
+
+#: src/dialogs/shellcode.c:530
+msgid "Register size:"
+msgstr ""
+
+#: src/dialogs/shellcode.c:536
+msgid "32 bits"
+msgstr ""
+
+#: src/dialogs/shellcode.c:537
+msgid "16 bits"
+msgstr ""
+
+#: src/dialogs/shellcode.c:544
+msgid "Architecture"
+msgstr ""
+
+#: src/dialogs/shellcode.c:601
+#, fuzzy
+msgid "Format : "
+msgstr "Format : "
+
+#: src/dialogs/shellcode.c:617
+#, fuzzy
+msgid "File : "
+msgstr "Fichier: "
+
+#: src/dialogs/shellcode.c:756
+#, fuzzy
+msgid "<b>Lines to process</b>"
+msgstr "<b>Eléments à afficher</b>"
+
+#: src/dialogs/shellcode.c:763
+msgid "Prologue"
+msgstr ""
+
+#: src/dialogs/plugins.c:106
+msgid "Plugins selection"
+msgstr ""
+
+#: src/dialogs/plugins.c:210
+msgid "Author:"
+msgstr ""
+
+#: src/dialogs/plugins.c:215
+msgid "label8"
+msgstr ""
+
+#: src/dialogs/plugins.c:219
+msgid "Version:"
+msgstr ""
+
+#: src/dialogs/plugins.c:224
+msgid "label9"
+msgstr ""
+
+#: src/dialogs/plugins.c:228
+msgid "URL:"
+msgstr ""
+
+#: src/dialogs/plugins.c:233
+msgid "label10"
+msgstr ""
+
+#: src/dialogs/plugins.c:247
+msgid "label12"
+msgstr ""
+
+#: src/dialogs/plugins.c:252
+msgid "<b>Action</b>"
+msgstr ""
+
+#: src/dialogs/plugins.c:257
+msgid "<b>Details:</b>"
+msgstr ""
+
+#: src/dialogs/plugins.c:288
+msgid "Apply"
+msgstr ""
+
+#: src/dialogs/plugins.c:308
+msgid "Cancel"
 msgstr ""
 
 #: src/main.c:70
 #, c-format
-msgid "Locale directory: %s\n"
+msgid "Last compiled on %s at %s\n"
 msgstr ""
 
-#: src/panels/glimpse.c:105
-msgid "Glimpse"
+#: src/main.c:74
+#, c-format
+msgid "Data directory: %s\n"
 msgstr ""
 
-#: src/panels/breaks.c:155
-msgid "Breakpoints"
+#: src/main.c:75
+#, c-format
+msgid "Plugins directory: %s\n"
 msgstr ""
 
-#: src/arch/dalvik/operands/pool.c:210
-msgid "invalid type"
+#: src/main.c:76
+#, c-format
+msgid "Locale directory: %s\n"
 msgstr ""
 
-#: src/arch/dalvik/operands/pool.c:231
-msgid "invalid field"
+#: src/editor.c:155
+msgid "Chrysalide"
 msgstr ""
 
-#: src/arch/dalvik/operands/pool.c:247
-msgid "invalid method"
+#: src/editor.c:260
+msgid "The current project will be lost. Do you you want to save it ?"
 msgstr ""
diff --git a/src/analysis/binaries/file.c b/src/analysis/binaries/file.c
index df145f7..ad140ab 100644
--- a/src/analysis/binaries/file.c
+++ b/src/analysis/binaries/file.c
@@ -66,9 +66,6 @@ static void g_file_binary_finalize(GFileBinary *);
 /* Ecrit une sauvegarde du binaire dans un fichier XML. */
 static bool g_file_binary_save(const GFileBinary *, xmlDocPtr, xmlXPathContextPtr, const char *);
 
-/* Fournit le fichier correspondant à l'élément binaire. */
-static const char *g_file_binary_get_filename(const GFileBinary *, bool);
-
 
 
 /* Indique le type défini pour une description de fichier binaire. */
@@ -348,7 +345,7 @@ static bool g_file_binary_save(const GFileBinary *binary, xmlDocPtr xdoc, xmlXPa
 *                                                                             *
 ******************************************************************************/
 
-static const char *g_file_binary_get_filename(const GFileBinary *binary, bool full)
+const char *g_file_binary_get_filename(const GFileBinary *binary, bool full)
 {
     const char *result;                     /* Description à retourner     */
 
diff --git a/src/analysis/binaries/file.h b/src/analysis/binaries/file.h
index d09c86d..40bc722 100644
--- a/src/analysis/binaries/file.h
+++ b/src/analysis/binaries/file.h
@@ -56,6 +56,9 @@ GLoadedBinary *g_file_binary_new_from_file(const char *);
 /* Charge en mémoire le contenu d'un fichier à partir d'XML. */
 GLoadedBinary *g_file_binary_new_from_xml(xmlXPathContextPtr, const char *);
 
+/* Fournit le fichier correspondant à l'élément binaire. */
+const char *g_file_binary_get_filename(const GFileBinary *, bool);
+
 
 
 #endif  /* _ANALYSIS_BINARIES_FILE_H */
diff --git a/src/arch/Makefile.am b/src/arch/Makefile.am
index 94c8305..e87247e 100644
--- a/src/arch/Makefile.am
+++ b/src/arch/Makefile.am
@@ -15,7 +15,8 @@ libarch_la_SOURCES =					\
 	processor.h processor.c				\
 	register-int.h						\
 	register.h register.c				\
-	translate.h
+	translate.h							\
+	vmpa.h vmpa.c
 
 libarch_la_LIBADD =						\
 	arm/libarcharm.la					\
diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c
new file mode 100644
index 0000000..24d5792
--- /dev/null
+++ b/src/arch/vmpa.c
@@ -0,0 +1,87 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * vmpa.c - adressages virtuels ou physiques
+ *
+ * Copyright (C) 2014 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "vmpa.h"
+
+
+#include <inttypes.h>
+#include <malloc.h>
+
+
+
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : phy  = position dans la mémoire physique.                    *
+*                virt = adresse dans la mémoire virtuelle.                    *
+*                                                                             *
+*  Description : Crée une localisation dans l'adressage mémoire.              *
+*                                                                             *
+*  Retour      : Adressage alloué en mémoire.                                 *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+vmpa2_t *make_vmpa(off_t phy, uint64_t virt)
+{
+    vmpa2_t *result;                        /* Structure à retourner       */
+
+    result = (vmpa2_t *)calloc(1, sizeof(vmpa2_t));
+
+    result->physical = phy;
+    result->virtual = virt;
+
+    return result;
+
+}
+
+
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : addr = élément à initialiser.                                *
+*                phy  = position dans la mémoire physique.                    *
+*                virt = adresse dans la mémoire virtuelle.                    *
+*                                                                             *
+*  Description : Initialise une localisation dans l'espace mémoire/physique.  *
+*                                                                             *
+*  Retour      : Adressage alloué en mémoire.                                 *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+void init_vmpa(vmpa2_t *addr, off_t phy, uint64_t virt)
+{
+    addr->physical = phy;
+    addr->virtual = virt;
+
+}
+
+
diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h
new file mode 100644
index 0000000..fa14fda
--- /dev/null
+++ b/src/arch/vmpa.h
@@ -0,0 +1,68 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * vmpa.h - prototypes des adressages virtuels ou physiques
+ *
+ * Copyright (C) 2014 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _ARCH_VMPA_H
+#define _ARCH_VMPA_H
+
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+
+
+
+
+/* Adresse mémoire ou position physique */
+struct _vmpa2_t
+{
+    off_t physical;                         /* Position physique           */
+    uint64_t virtual;                       /* Adresse virtuelle           */
+
+};
+
+
+
+/* Adresse mémoire ou position physique */
+typedef struct _vmpa2_t vmpa2_t;
+
+
+/* Initialise une localisation dans l'espace mémoire/physique. */
+void init_vmpa(vmpa2_t *, off_t, uint64_t);
+
+
+
+
+/* Crée une localisation dans l'adressage mémoire. */
+vmpa2_t *make_vmpa(off_t, uint64_t);
+
+
+
+#define load_vmpa_from_fd(vmpa, fd) true
+
+#define store_vmpa_to_fd(vmpa, fd) true
+
+
+
+
+#endif  /* _ARCH_VMPA_H */
diff --git a/src/gtkext/gtkdockstation.c b/src/gtkext/gtkdockstation.c
index c299542..a742c07 100644
--- a/src/gtkext/gtkdockstation.c
+++ b/src/gtkext/gtkdockstation.c
@@ -230,7 +230,7 @@ void gtk_dock_panel_add_widget(GtkDockStation *station, GtkWidget *widget, const
     char *str;                              /* Titre des prochaines fois   */
     GtkWidget *label;                       /* Etiquette d'onglet          */
 
-    max = get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_TAB);
+    max = 3; // TODO : config dans un .so pour Python // get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_TAB);
 
     str = ellipsis(strdup(caption), max);
     label = qck_create_label(NULL, NULL, str);
@@ -249,7 +249,7 @@ void gtk_dock_panel_add_widget(GtkDockStation *station, GtkWidget *widget, const
 
     str = g_object_get_data(G_OBJECT(widget), "title");
     if (str != NULL) free(str);
-    max = get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_HEADER);
+    max = 3; // TODO : config dans un .so pour Python // get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_HEADER);
     g_object_set_data(G_OBJECT(widget), "title", ellipsis(strdup(caption), max));
 
     gtk_dock_panel_update_title(station, widget, caption);
-- 
cgit v0.11.2-87-g4458