From ba30fbc703ff3ad77bb5df6c167809955215d49c Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 26 Jul 2020 21:13:51 +0200
Subject: Avoided fixed columns when filling lines with locations.

---
 src/arch/instruction.c            |  5 ++++-
 src/arch/instructions/raw.c       |  7 +++++--
 src/arch/instructions/undefined.c |  5 ++++-
 src/format/symbol.c               |  5 ++++-
 src/glibext/bufferline.c          | 40 +++++++++------------------------------
 src/glibext/bufferline.h          |  7 ++-----
 src/glibext/gbinportion.c         |  5 ++++-
 src/glibext/generators/hex.c      |  2 +-
 src/glibext/generators/rborder.c  |  5 ++++-
 9 files changed, 37 insertions(+), 44 deletions(-)

diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 6bc158f..73b68f2 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -34,6 +34,7 @@
 #include "storage.h"
 #include "../glibext/gbinarycursor.h"
 #include "../glibext/linegen-int.h"
+#include "../gtkext/gtkblockdisplay.h"
 
 
 
@@ -1962,7 +1963,9 @@ static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line
     size_t i;                               /* Boucle de parcours          */
     GArchOperand *op;                       /* Opérande à manipuler        */
 
-    g_buffer_line_fill_vmpa(line, get_mrange_addr(&instr->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&instr->range));
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&instr->range));
 
     g_buffer_line_fill_content(line, content, &instr->range, VMPA_NO_PHYSICAL);
 
diff --git a/src/arch/instructions/raw.c b/src/arch/instructions/raw.c
index 05eb886..84a79e9 100644
--- a/src/arch/instructions/raw.c
+++ b/src/arch/instructions/raw.c
@@ -1,6 +1,6 @@
 
 /* Chrysalide - Outil d'analyse de fichiers binaires
- * artificial.c - instructions pures vues de l'esprit
+ * raw.c - instructions pures vues de l'esprit
  *
  * Copyright (C) 2014-2020 Cyrille Bagard
  *
@@ -35,6 +35,7 @@
 #include "../instruction-int.h"
 #include "../operands/immediate.h"
 #include "../operands/target.h"
+#include "../../gtkext/gtkblockdisplay.h"
 
 
 
@@ -629,7 +630,9 @@ static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, s
 
     /* Localisation */
 
-    g_buffer_line_fill_vmpa(line, get_mrange_addr(&base->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&base->range));
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&base->range));
 
     /* Contenu */
 
diff --git a/src/arch/instructions/undefined.c b/src/arch/instructions/undefined.c
index 6d90a1c..1623d7b 100644
--- a/src/arch/instructions/undefined.c
+++ b/src/arch/instructions/undefined.c
@@ -31,6 +31,7 @@
 
 
 #include "undefined-int.h"
+#include "../../gtkext/gtkblockdisplay.h"
 
 
 
@@ -385,7 +386,9 @@ static void g_undef_instruction_print(GUndefInstruction *instr, GBufferLine *lin
 
     base = G_ARCH_INSTRUCTION(instr);
 
-    g_buffer_line_fill_vmpa(line, get_mrange_addr(&base->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&base->range));
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&base->range));
 
     g_buffer_line_fill_content(line, content, &base->range, VMPA_NO_PHYSICAL);
 
diff --git a/src/format/symbol.c b/src/format/symbol.c
index d2faf7c..918b006 100644
--- a/src/format/symbol.c
+++ b/src/format/symbol.c
@@ -32,6 +32,7 @@
 #include "symbol-int.h"
 #include "../glibext/gbinarycursor.h"
 #include "../glibext/linegen-int.h"
+#include "../gtkext/gtkblockdisplay.h"
 
 
 
@@ -842,7 +843,9 @@ static void g_binary_symbol_print(GBinSymbol *symbol, GBufferLine *line, size_t
 {
     char *label;                            /* Etiquette à insérer         */
 
-    g_buffer_line_fill_vmpa(line, get_mrange_addr(&symbol->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&symbol->range));
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&symbol->range));
 
     label = g_binary_symbol_get_label(symbol);
 
diff --git a/src/glibext/bufferline.c b/src/glibext/bufferline.c
index 2f694dd..ba25b8f 100644
--- a/src/glibext/bufferline.c
+++ b/src/glibext/bufferline.c
@@ -288,6 +288,7 @@ const mrange_t *g_buffer_line_get_range(const GBufferLine *line)
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : line = ligne à venir compléter.                              *
+*                col  = indice de la colonne à constituer.                    *
 *                size = taille souhaitée de l'impression des positions.       *
 *                addr = localisation physique à venir représenter.            *
 *                                                                             *
@@ -299,7 +300,7 @@ const mrange_t *g_buffer_line_get_range(const GBufferLine *line)
 *                                                                             *
 ******************************************************************************/
 
-void g_buffer_line_fill_phys(GBufferLine *line, MemoryDataSize size, const vmpa2t *addr)
+void g_buffer_line_fill_phys(GBufferLine *line, size_t col, MemoryDataSize size, const vmpa2t *addr)
 {
     VMPA_BUFFER(position);                  /* Emplacement au format texte */
     size_t len;                             /* Taille de l'élément inséré  */
@@ -314,9 +315,9 @@ void g_buffer_line_fill_phys(GBufferLine *line, MemoryDataSize size, const vmpa2
         i = len - 1;
 
     if (i > 0)
-        g_buffer_line_append_text(line, BLC_PHYSICAL, position, i, RTT_PHYS_ADDR_PAD, NULL);
+        g_buffer_line_append_text(line, col, position, i, RTT_PHYS_ADDR_PAD, NULL);
 
-    g_buffer_line_append_text(line, BLC_PHYSICAL, &position[i], len - i, RTT_PHYS_ADDR, NULL);
+    g_buffer_line_append_text(line, col, &position[i], len - i, RTT_PHYS_ADDR, NULL);
 
 }
 
@@ -324,6 +325,7 @@ void g_buffer_line_fill_phys(GBufferLine *line, MemoryDataSize size, const vmpa2
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : line = ligne à venir compléter.                              *
+*                col  = indice de la colonne à constituer.                    *
 *                size = taille souhaitée de l'impression des positions.       *
 *                addr = localisation virtuelle à venir représenter.           *
 *                                                                             *
@@ -335,7 +337,7 @@ void g_buffer_line_fill_phys(GBufferLine *line, MemoryDataSize size, const vmpa2
 *                                                                             *
 ******************************************************************************/
 
-void g_buffer_line_fill_virt(GBufferLine *line, MemoryDataSize size, const vmpa2t *addr)
+void g_buffer_line_fill_virt(GBufferLine *line, size_t col, MemoryDataSize size, const vmpa2t *addr)
 {
     VMPA_BUFFER(position);                  /* Emplacement au format texte */
     size_t len;                             /* Taille de l'élément inséré  */
@@ -352,38 +354,14 @@ void g_buffer_line_fill_virt(GBufferLine *line, MemoryDataSize size, const vmpa2
             i = len - 1;
 
         if (i > 0)
-            g_buffer_line_append_text(line, BLC_VIRTUAL, position, i, RTT_VIRT_ADDR_PAD, NULL);
+            g_buffer_line_append_text(line, col, position, i, RTT_VIRT_ADDR_PAD, NULL);
 
-        g_buffer_line_append_text(line, BLC_VIRTUAL, &position[i], len - i, RTT_VIRT_ADDR, NULL);
+        g_buffer_line_append_text(line, col, &position[i], len - i, RTT_VIRT_ADDR, NULL);
 
     }
 
     else
-        g_buffer_line_append_text(line, BLC_VIRTUAL, position, len, RTT_VIRT_ADDR_PAD, NULL);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : line  = ligne à venir compléter.                             *
-*                addr  = localisation à afficher.                             *
-*                psize = taille souhaitée de l'impression des positions.      *
-*                vsize = taille souhaitée de l'impression des adresses.       *
-*                                                                             *
-*  Description : Construit le tronc commun d'une ligne autour de sa position. *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void g_buffer_line_fill_vmpa(GBufferLine *line, const vmpa2t *addr, MemoryDataSize psize, MemoryDataSize vsize)
-{
-    g_buffer_line_fill_phys(line, psize, addr);
-
-    g_buffer_line_fill_virt(line, vsize, addr);
+        g_buffer_line_append_text(line, col, position, len, RTT_VIRT_ADDR_PAD, NULL);
 
 }
 
diff --git a/src/glibext/bufferline.h b/src/glibext/bufferline.h
index a7982d0..cfb4432 100644
--- a/src/glibext/bufferline.h
+++ b/src/glibext/bufferline.h
@@ -110,13 +110,10 @@ GBufferLine *g_buffer_line_new(const mrange_t *, BufferLineColumn);
 const mrange_t *g_buffer_line_get_range(const GBufferLine *);
 
 /* Construit le tronc commun d'une ligne autour de sa position. */
-void g_buffer_line_fill_phys(GBufferLine *, MemoryDataSize, const vmpa2t *);
+void g_buffer_line_fill_phys(GBufferLine *, size_t, MemoryDataSize, const vmpa2t *);
 
 /* Construit le tronc commun d'une ligne autour de sa position. */
-void g_buffer_line_fill_virt(GBufferLine *, MemoryDataSize, const vmpa2t *);
-
-/* Construit le tronc commun d'une ligne autour de sa position. */
-void g_buffer_line_fill_vmpa(GBufferLine *, const vmpa2t *, MemoryDataSize, MemoryDataSize);
+void g_buffer_line_fill_virt(GBufferLine *, size_t, MemoryDataSize, const vmpa2t *);
 
 /* Construit le tronc commun d'une ligne autour de son contenu. */
 void g_buffer_line_fill_content(GBufferLine *, const GBinContent *, const mrange_t *, phys_t);
diff --git a/src/glibext/gbinportion.c b/src/glibext/gbinportion.c
index 44053f9..670e0ec 100644
--- a/src/glibext/gbinportion.c
+++ b/src/glibext/gbinportion.c
@@ -40,6 +40,7 @@
 #include "../common/sort.h"
 #include "../glibext/gbinarycursor.h"
 #include "../glibext/linegen-int.h"
+#include "../gtkext/gtkblockdisplay.h"
 
 
 
@@ -1121,7 +1122,9 @@ static void g_binary_portion_print(GBinPortion *portion, GBufferLine *line, size
 {
     assert(repeat < portion->lcount);
 
-    g_buffer_line_fill_vmpa(line, get_mrange_addr(&portion->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&portion->range));
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, MDS_32_BITS_UNSIGNED, get_mrange_addr(&portion->range));
 
     if (portion->text[repeat] != NULL)
     {
diff --git a/src/glibext/generators/hex.c b/src/glibext/generators/hex.c
index f08d3fb..9285e00 100644
--- a/src/glibext/generators/hex.c
+++ b/src/glibext/generators/hex.c
@@ -487,7 +487,7 @@ static void g_hex_generator_print(GHexGenerator *generator, GBufferLine *line, s
 
     init_vmpa(&pos, generator->bytes_per_line * index, VMPA_NO_VIRTUAL);
 
-    g_buffer_line_fill_phys(line, MDS_32_BITS_UNSIGNED, &pos);
+    g_buffer_line_fill_phys(line, HLC_PHYSICAL, MDS_32_BITS_UNSIGNED, &pos);
 
     /* Contenu brut */
 
diff --git a/src/glibext/generators/rborder.c b/src/glibext/generators/rborder.c
index 8ff1271..42ffc23 100644
--- a/src/glibext/generators/rborder.c
+++ b/src/glibext/generators/rborder.c
@@ -33,6 +33,7 @@
 #include "../gbinarycursor.h"
 #include "../linegen-int.h"
 #include "../linesegment.h"
+#include "../../gtkext/gtkblockdisplay.h"
 
 
 
@@ -357,7 +358,9 @@ static void g_border_generator_print(GBorderGenerator *generator, GBufferLine *l
 
     assert(repeat < 3);
 
-    g_buffer_line_fill_vmpa(line, &generator->addr, generator->msize, generator->msize);
+    g_buffer_line_fill_phys(line, DLC_PHYSICAL, generator->msize, &generator->addr);
+
+    g_buffer_line_fill_virt(line, DLC_VIRTUAL, generator->msize, &generator->addr);
 
     if (repeat == 1)
     {
-- 
cgit v0.11.2-87-g4458