diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/exporter-int.h | 16 | ||||
-rw-r--r-- | src/analysis/exporter.c | 191 | ||||
-rw-r--r-- | src/analysis/exporter.h | 6 | ||||
-rw-r--r-- | src/analysis/line_code.c | 108 | ||||
-rw-r--r-- | src/analysis/line_comment.c | 66 | ||||
-rw-r--r-- | src/analysis/line_prologue.c | 35 |
6 files changed, 1 insertions, 421 deletions
diff --git a/src/analysis/exporter-int.h b/src/analysis/exporter-int.h index 421770e..5198e4f 100644 --- a/src/analysis/exporter-int.h +++ b/src/analysis/exporter-int.h @@ -35,12 +35,6 @@ typedef void (* add_text_fc) (GContentExporter *, GRenderingOptions *, MainRende /* Ajoute à un texte GTK le contenu de la ligne de rendu. */ typedef void (* export_buffer_fc) (GContentExporter *, GBufferLine *, GRenderingOptions *); -/* Ajoute à un texte GTK le contenu de la ligne de rendu. */ -typedef void (* add_to_gtk_buffer_fc) (GContentExporter *, MainRendering, GtkTextBuffer *, GtkTextIter *, size_t [SAR_COUNT]); - -/* Traduit une instruction en version humainement lisible. */ -typedef void (* add_arch_to_gtk_buffer_fc) (const GContentExporter *, const GExeFormat *, AsmSyntax, GtkTextBuffer *, GtkTextIter *); - /* Exportation de contenu (instance) */ @@ -49,10 +43,7 @@ struct _GContentExporter GObject parent; /* A laisser en premier */ add_text_fc add_text; /* Remplissage simple */ - export_buffer_fc export_buffer; /* Constitution du texte GTK */ - add_to_gtk_buffer_fc add_to_gtk_buffer; /* Constitution du texte GTK */ - - add_arch_to_gtk_buffer_fc add_arch_to_gtk_buffer; /* Constitution... */ + export_buffer_fc export_buffer; /* Constitution du texte GLib */ }; @@ -65,8 +56,6 @@ struct _GContentExporterClass PangoContext *context; /* Contexte graphique Pango */ PangoAttrList *attribs[RTT_COUNT]; /* Décorateurs pour tampons */ - GtkTextTag *tags[RTT_COUNT]; /* Décorateurs pour les textes */ - }; @@ -76,9 +65,6 @@ void g_content_exporter_insert_text(GContentExporter *, FILE *, const char *, si /* Ajoute du texte à un tampon de code via l'instance spécifiée. */ void g_content_exporter_insert_into_buffer(GContentExporter *, GBufferLine *, BufferLineColumn, const char *, size_t, RenderingTagType); -/* Ajoute du texte à un texte GTK via l'instance spécifiée. */ -void g_content_exporter_insert_with_gtk_tag(GContentExporter *, GtkTextBuffer *, GtkTextIter *, const char *, size_t, RenderingTagType); - #endif /* _ANALYSIS_EXPORTER_INT_H */ diff --git a/src/analysis/exporter.c b/src/analysis/exporter.c index 5820fd6..b6d773a 100644 --- a/src/analysis/exporter.c +++ b/src/analysis/exporter.c @@ -48,8 +48,6 @@ static void g_content_exporter_class_init(GContentExporterClass *klass) { GdkScreen *screen; /* Ecran pour GDK */ PangoFontDescription *font_desc; /* Police de caractère */ - GtkTextTagTable *table; /* Seule table globale valable */ - GtkTextTag *tag; /* Exportation vers un tampon de code */ @@ -87,89 +85,6 @@ static void g_content_exporter_class_init(GContentExporterClass *klass) klass->attribs[RTT_VAR_NAME] = pango_attr_list_new(); - - - /* Décorateurs GTK */ - - table = get_gtk_tag_table(); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "green", NULL); - - klass->tags[RTT_COMMENT] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "gray", NULL); - - klass->tags[RTT_RAW_CODE] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "red", NULL); - - klass->tags[RTT_INSTRUCTION] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "purple", NULL); - - klass->tags[RTT_IMMEDIATE] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "blue", NULL); - - klass->tags[RTT_REGISTER] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "blue", "background", "black", NULL); - - klass->tags[RTT_HOOK] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "white", "background", "black", NULL); - - klass->tags[RTT_SIGNS] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "red", "background", "black", NULL); - - klass->tags[RTT_LTGT] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "black", NULL); - - klass->tags[RTT_SEGMENT] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "orange", NULL); - - klass->tags[RTT_STRING] = tag; - gtk_text_tag_table_add(table, tag); - - tag = gtk_text_tag_new(NULL); - - g_object_set(G_OBJECT(tag), "foreground", "black", NULL); - - klass->tags[RTT_VAR_NAME] = tag; - gtk_text_tag_table_add(table, tag); - } @@ -193,33 +108,6 @@ static void g_content_exporter_init(GContentExporter *exporter) /****************************************************************************** * * -* Paramètres : table = éventuelle instance à enregistrer. * -* * -* Description : Définit et/ou renvoie le singleton pour les marques de texte.* -* * -* Retour : Table courante à utiliser. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkTextTagTable *_get_gtk_tag_table(GtkTextTagTable *table) -{ - static GtkTextTagTable *result = NULL; /* Table valable à renvoyer */ - - if (table != NULL) - { - if (result != NULL) /* TODO : free() */; - result = table; - } - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : exporter = instance sachant exporter son contenu. * * stream = flux ouvert en écriture. * * text = texte à insérer dans l'existant. * @@ -276,37 +164,6 @@ void g_content_exporter_insert_into_buffer(GContentExporter *exporter, GBufferLi /****************************************************************************** * * -* Paramètres : exporter = instance sachant exporter son contenu. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. [OUT] * -* text = texte à insérer dans l'existant. * -* length = taille du texte à traiter. * -* tag = type de décorateur à utiliser. * -* * -* Description : Ajoute du texte à un texte GTK via l'instance spécifiée. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_content_exporter_insert_with_gtk_tag(GContentExporter *exporter, GtkTextBuffer *buffer, GtkTextIter *iter, const char *text, size_t length, RenderingTagType tag) -{ - size_t init; /* Point d'insertion initial */ - - if (tag != RTT_NONE) - gtk_text_buffer_insert_with_tags(buffer, iter, text, length, - G_CONTENT_EXPORTER_GET_CLASS(exporter)->tags[tag], - NULL); - - else gtk_text_buffer_insert_with_tags(buffer, iter, text, length, NULL); - -} - - -/****************************************************************************** -* * * Paramètres : exporter = instance sachant exporter son contenu. * * options = options de rendu. * * rendering = support effectif final des lignes de code. * @@ -348,51 +205,3 @@ void g_content_exporter_to_buffer(GContentExporter *exporter, GBufferLine *line, exporter->export_buffer(exporter, line, options); } - - -/****************************************************************************** -* * -* Paramètres : exporter = instance sachant exporter son contenu. * -* rendering = support effectif final des lignes de code. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. * -* lengths = taille des différentes composantes de la ligne. * -* * -* Description : Ajoute à un texte GTK le contenu de l'instance spécifiée. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_content_exporter_add_to_gtk_buffer(GContentExporter *exporter, MainRendering rendering, GtkTextBuffer *buffer, GtkTextIter *iter, size_t lengths[SAR_COUNT]) -{ - if (exporter->add_to_gtk_buffer != NULL) - exporter->add_to_gtk_buffer(exporter, rendering, buffer, iter, lengths); - -} - - -/****************************************************************************** -* * -* Paramètres : exporter = instance sachant exporter son contenu. * -* format = format du binaire manipulé. * -* syntax = type de représentation demandée. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. * -* * -* Description : Ajoute à un texte GTK le contenu d'une architecture. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_content_exporter_add_arch_to_gtk_buffer(const GContentExporter *exporter, const GExeFormat *format, AsmSyntax syntax, GtkTextBuffer *buffer, GtkTextIter *iter) -{ - if (exporter->add_arch_to_gtk_buffer != NULL) - exporter->add_arch_to_gtk_buffer(exporter, format, syntax, buffer, iter); - -} diff --git a/src/analysis/exporter.h b/src/analysis/exporter.h index 297fd99..7c90cad 100644 --- a/src/analysis/exporter.h +++ b/src/analysis/exporter.h @@ -95,12 +95,6 @@ void g_content_exporter_add_text(GContentExporter *, GRenderingOptions *, MainRe /* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */ void g_content_exporter_to_buffer(GContentExporter *, GBufferLine *, GRenderingOptions *); -/* Ajoute à un texte GTK le contenu de l'instance spécifiée. */ -void g_content_exporter_add_to_gtk_buffer(GContentExporter *, MainRendering, GtkTextBuffer *, GtkTextIter *, size_t [SAR_COUNT]); - -/* Ajoute à un texte GTK le contenu d'une architecture. */ -void g_content_exporter_add_arch_to_gtk_buffer(const GContentExporter *, const GExeFormat *, AsmSyntax, GtkTextBuffer *, GtkTextIter *); - #endif /* _ANALYSIS_EXPORTER_H */ diff --git a/src/analysis/line_code.c b/src/analysis/line_code.c index 4761522..7630366 100644 --- a/src/analysis/line_code.c +++ b/src/analysis/line_code.c @@ -64,9 +64,6 @@ static void g_code_line_add_text(GCodeLine *, GRenderingOptions *, MainRendering /* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */ static void g_code_line_to_buffer(GCodeLine *, GBufferLine *, GRenderingOptions *); -/* Ajoute à un texte GTK le contenu de la ligne de code. */ -static void g_code_line_add_to_gtk_buffer(GCodeLine *, MainRendering, GtkTextBuffer *, GtkTextIter *, size_t [SAR_COUNT]); - /* Indique le type définit par la GLib pour la ligne. */ @@ -113,7 +110,6 @@ static void g_code_line_init(GCodeLine *line) exporter_parent->add_text = (add_text_fc)g_code_line_add_text; exporter_parent->export_buffer = (export_buffer_fc)g_code_line_to_buffer; - exporter_parent->add_to_gtk_buffer = (add_to_gtk_buffer_fc)g_code_line_add_to_gtk_buffer; line_parent = G_RENDERING_LINE(line); @@ -290,110 +286,6 @@ static void g_code_line_to_buffer(GCodeLine *line, GBufferLine *buffer, GRenderi /****************************************************************************** * * -* Paramètres : line = ligne de représentation à actualiser. * -* rendering = support effectif final des lignes de code. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. * -* lengths = taille des différentes composantes de la ligne. * -* * -* Description : Ajoute à un texte GTK le contenu de la ligne de code. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_code_line_add_to_gtk_buffer(GCodeLine *line, MainRendering rendering, GtkTextBuffer *buffer, GtkTextIter *iter, size_t lengths[SAR_COUNT]) -{ - GContentExporter *exporter; /* Autre vision de la ligne #1 */ - GRenderingLine *basic; /* Autre vision de la ligne #2 */ - bool show_address; /* Affichage de l'adresse ? */ - bool show_code; /* Affichage du code brut ? */ - MemoryDataSize msize; /* Taille du bus d'adresses */ - char address[VMPA_MAX_SIZE]; /* Adresse au format texte */ - size_t len; /* Taille de l'élément inséré */ - const bin_t *content; /* Contenu binaire global */ - off_t bin_offset; /* Début de l'instruction */ - off_t bin_len; /* Taille d'instruction */ - char *bin_code; /* Tampon du code binaire */ - off_t i; /* Boucle de parcours */ - - exporter = G_CONTENT_EXPORTER(line); - basic = G_RENDERING_LINE(line); - - show_address = g_rendering_options_has_to_show_address(line->options, rendering); - show_code = g_rendering_options_has_to_show_code(line->options, rendering); - - /* Eventuelle adresse virtuelle ou physique */ - - if (show_address) - { - msize = g_arch_processor_get_memory_size(g_rendering_options_get_processor(line->options)); - - len = vmpa_to_string(G_RENDERING_LINE(line)->offset, msize, address); - lengths[SAR_ADDRESS] = len; - - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, - address, len, RTT_NONE); - - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, - "\t", 1, RTT_NONE); - - } - - /* Eventuel code brut */ - - if (show_code) - { - content = g_binary_format_get_content(G_BIN_FORMAT(g_rendering_options_get_format(line->options)), NULL); - g_arch_instruction_get_location(line->instr, &bin_offset, &bin_len, NULL); - - lengths[SAR_CODE] = MAX(lengths[SAR_CODE], bin_len * 3 - 1); - - bin_code = (char *)calloc(bin_len * 3, sizeof(char)); - - for (i = 0; i < bin_len; i++) - { - if ((i + 1) < bin_len) - snprintf(&bin_code[i * (2 + 1)], 4, "%02hhx ", content[bin_offset + i]); - else - snprintf(&bin_code[i * (2 + 1)], 3, "%02hhx", content[bin_offset + i]); - } - - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, - bin_code, bin_len * 3 - 1, RTT_RAW_CODE); - - free(bin_code); - - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, - "\t", 1, RTT_NONE); - - } - - /* Instruction proprement dite */ - - g_content_exporter_add_arch_to_gtk_buffer(G_CONTENT_EXPORTER(line->instr), - g_rendering_options_get_format(line->options), - ASX_INTEL/*FIXME*/, buffer, iter); - - lengths[SAR_INSTRUCTION] = MAX(lengths[SAR_INSTRUCTION], 4 /* FIXME */); - - /* Commentaire ? */ - - if (basic->comment != NULL) - { - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, "\t", 1, RTT_NONE); - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, "; ", 2, RTT_COMMENT); - g_content_exporter_insert_with_gtk_tag(exporter, buffer, iter, basic->comment, - strlen(basic->comment), RTT_COMMENT); - } - -} - - -/****************************************************************************** -* * * Paramètres : offset = emplacement physique ou en mémoire. * * instr = instruction à représenter. * * options = paramétrage du rendu. * diff --git a/src/analysis/line_comment.c b/src/analysis/line_comment.c index 8af1777..5bdf29a 100644 --- a/src/analysis/line_comment.c +++ b/src/analysis/line_comment.c @@ -60,9 +60,6 @@ static void g_comment_line_init(GCommentLine *); /* Ajoute du texte simple à un fichier ouvert en écriture. */ static void g_comment_line_add_text(GCommentLine *, GRenderingOptions *, MainRendering, FILE *); -/* Ajoute à un texte GTK le contenu de la ligne de commentaires. */ -static void g_comment_line_add_to_gtk_buffer(GCommentLine *, MainRendering, GtkTextBuffer *, GtkTextIter *, size_t [SAR_COUNT]); - /* Indique le type définit par la GLib pour la ligne. */ @@ -108,7 +105,6 @@ static void g_comment_line_init(GCommentLine *line) exporter_parent = G_CONTENT_EXPORTER(line); exporter_parent->add_text = (add_text_fc)g_comment_line_add_text; - exporter_parent->add_to_gtk_buffer = (add_to_gtk_buffer_fc)g_comment_line_add_to_gtk_buffer; line_parent = G_RENDERING_LINE(line); @@ -177,68 +173,6 @@ static void g_comment_line_add_text(GCommentLine *line, GRenderingOptions *optio /****************************************************************************** * * -* Paramètres : line = ligne de représentation à actualiser. * -* rendering = support effectif final des lignes de code. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. * -* lengths = taille des différentes composantes de la ligne. * -* * -* Description : Ajoute à un texte GTK le contenu de la ligne de commentaires.* -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_comment_line_add_to_gtk_buffer(GCommentLine *line, MainRendering rendering, GtkTextBuffer *buffer, GtkTextIter *iter, size_t lengths[SAR_COUNT]) -{ - bool show_address; /* Affichage de l'adresse ? */ - bool show_code; /* Affichage du code brut ? */ - MemoryDataSize msize; /* Taille du bus d'adresses */ - char address[VMPA_MAX_SIZE]; /* Adresse au format texte */ - size_t len; /* Taille de l'élément inséré */ - - show_address = g_rendering_options_has_to_show_address(line->options, rendering); - show_code = g_rendering_options_has_to_show_code(line->options, rendering); - - /* Eventuelle adresse virtuelle ou physique */ - - if (show_address) - { - msize = g_arch_processor_get_memory_size(g_rendering_options_get_processor(line->options)); - - len = vmpa_to_string(G_RENDERING_LINE(line)->offset, msize, address); - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - address, len, RTT_NONE); - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - "\t", 1, RTT_NONE); - - } - - /* Eventuel code brut (sauté) */ - - if (show_code) - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - "\t", 1, RTT_NONE); - - /* Commentaire proprement dit */ - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - "; ", 2, RTT_COMMENT); - - len = strlen(line->comment); - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - line->comment, len, RTT_COMMENT); - -} - - -/****************************************************************************** -* * * Paramètres : offset = emplacement physique ou en mémoire. * * comment = texte à afficher au final. * * options = paramétrage du rendu. * diff --git a/src/analysis/line_prologue.c b/src/analysis/line_prologue.c index 007804b..d530a44 100644 --- a/src/analysis/line_prologue.c +++ b/src/analysis/line_prologue.c @@ -59,9 +59,6 @@ static void g_prologue_line_init(GPrologueLine *); /* Ajoute du texte simple à un fichier ouvert en écriture. */ static void g_prologue_line_add_text(GPrologueLine *, GRenderingOptions *, MainRendering, FILE *); -/* Ajoute à un texte GTK le contenu de la ligne d'ouverture. */ -static void g_prologue_line_add_to_gtk_buffer(GPrologueLine *, MainRendering, GtkTextBuffer *, GtkTextIter *, size_t [SAR_COUNT]); - /* Indique le type définit par la GLib pour la ligne. */ @@ -107,7 +104,6 @@ static void g_prologue_line_init(GPrologueLine *line) exporter_parent = G_CONTENT_EXPORTER(line); exporter_parent->add_text = (add_text_fc)g_prologue_line_add_text; - exporter_parent->add_to_gtk_buffer = (add_to_gtk_buffer_fc)g_prologue_line_add_to_gtk_buffer; line_parent = G_RENDERING_LINE(line); @@ -148,37 +144,6 @@ static void g_prologue_line_add_text(GPrologueLine *line, GRenderingOptions *opt /****************************************************************************** * * -* Paramètres : line = ligne de représentation à actualiser. * -* rendering = support effectif final des lignes de code. * -* buffer = zone de texte à venir compléter. * -* iter = point d'insertion du nouveau texte. * -* lengths = taille des différentes composantes de la ligne. * -* * -* Description : Ajoute à un texte GTK le contenu de la ligne d'ouverture. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_prologue_line_add_to_gtk_buffer(GPrologueLine *line, MainRendering rendering, GtkTextBuffer *buffer, GtkTextIter *iter, size_t lengths[SAR_COUNT]) -{ - size_t len; /* Taille de l'élément inséré */ - - len = strlen(line->comment); - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - "; ", 2, RTT_COMMENT); - - g_content_exporter_insert_with_gtk_tag(G_CONTENT_EXPORTER(line), buffer, iter, - line->comment, len, RTT_COMMENT); - -} - - -/****************************************************************************** -* * * Paramètres : comment = texte à afficher au final. * * * * Description : Crée une des lignes de descriptions initiales. * |