summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2012-11-22 23:43:14 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2012-11-22 23:43:14 (GMT)
commit9428bf292d066055d168b9bb49fe90c41f2942d1 (patch)
tree9d4d75a414f058dc7015401d8fada63ec24fe14b /src/arch
parent3669bdaf8552f53baa5cfb2b0d360959eea61236 (diff)
Replaced the text of some registers (this and parameters).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@289 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/operand-int.h4
-rw-r--r--src/arch/operand.c48
-rw-r--r--src/arch/operand.h3
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);