diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/operand-int.h | 4 | ||||
-rw-r--r-- | src/arch/operand.c | 48 | ||||
-rw-r--r-- | src/arch/operand.h | 3 |
3 files changed, 54 insertions, 1 deletions
diff --git a/src/arch/operand-int.h b/src/arch/operand-int.h index d9ebde0..b9712c4 100644 --- a/src/arch/operand-int.h +++ b/src/arch/operand-int.h @@ -44,6 +44,10 @@ struct _GArchOperand operand_compare_fc compare; /* Comparaison d'opérandes */ operand_print_fc print; /* Texte humain équivalent */ + char *alt_text; /* Eventuel texte alternatif */ + size_t alt_len; /* Taille de ce texte */ + RenderingTagType alt_tag; /* Type de rendu */ + }; diff --git a/src/arch/operand.c b/src/arch/operand.c index e98683e..667921a 100644 --- a/src/arch/operand.c +++ b/src/arch/operand.c @@ -24,6 +24,10 @@ #include "operand.h" +#include <malloc.h> +#include <string.h> + + #include "operand-int.h" @@ -107,6 +111,41 @@ bool g_arch_operand_compare(const GArchOperand *a, const GArchOperand *b) /****************************************************************************** * * * Paramètres : operand = opérande à traiter. * +* text = représentation lisible alternative. * +* tag = style d'impression pour le remplacement. * +* * +* Description : Définit une autre représentation textuelle pour l'opérande. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_arch_operand_set_alt_text(GArchOperand *operand, const char *text, RenderingTagType tag) +{ + if (operand->alt_text != NULL) + free(operand->alt_text); + + if (text != NULL) + { + operand->alt_text = strdup(text); + operand->alt_len = strlen(text); + operand->alt_tag = tag; + } + else + { + operand->alt_text = NULL; + operand->alt_len = 0; + operand->alt_tag = RTT_COUNT; + } + +} + + +/****************************************************************************** +* * +* Paramètres : operand = opérande à traiter. * * line = ligne tampon où imprimer l'opérande donné. * * syntax = type de représentation demandée. * * * @@ -120,6 +159,13 @@ bool g_arch_operand_compare(const GArchOperand *a, const GArchOperand *b) void g_arch_operand_print(const GArchOperand *operand, GBufferLine *line, AsmSyntax syntax) { - return operand->print(operand, line, syntax); + if (operand->alt_text != NULL) + g_buffer_line_insert_text(line, BLC_ASSEMBLY, + operand->alt_text, + operand->alt_len, + operand->alt_tag); + + else + operand->print(operand, line, syntax); } diff --git a/src/arch/operand.h b/src/arch/operand.h index c0cd767..b521f7c 100644 --- a/src/arch/operand.h +++ b/src/arch/operand.h @@ -51,6 +51,9 @@ GType g_arch_operand_get_type(void); /* Compare un opérande avec un autre. */ bool g_arch_operand_compare(const GArchOperand *, const GArchOperand *); +/* Définit une autre représentation textuelle pour l'opérande. */ +void g_arch_operand_set_alt_text(GArchOperand *, const char *, RenderingTagType); + /* Traduit un opérande en version humainement lisible. */ void g_arch_operand_print(const GArchOperand *, GBufferLine *, AsmSyntax); |