From 5a4aab6a0b65c760ff53ab5cd97faea0a99bae29 Mon Sep 17 00:00:00 2001
From: Bob Dubner <rdubner@symas.com>
Date: Sun, 14 Apr 2024 00:03:09 -0400
Subject: [PATCH] WIP: Transition to GENERIC FldLiteralA handling

---
 libgcobol/libgcobol.cc | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc
index b72762c11510..f84ba9e5fd59 100644
--- a/libgcobol/libgcobol.cc
+++ b/libgcobol/libgcobol.cc
@@ -5220,7 +5220,6 @@ __gg__move_literala(struct cblc_refer_t *dest,
 
       case FldNumericBinary:
         {
-        int rdigits;
         value = __gg__dirty_to_binary_internal( source->field->initial,
                                                 source->field->capacity,
                                                 &rdigits );
@@ -5254,12 +5253,14 @@ __gg__move_literala(struct cblc_refer_t *dest,
         // Bin5 and Index are treated with no truncation, as if they were
         // trunc_bin_e.  The other types aren't subject to truncation.
         // We are moving a number to a number:
-        value = __gg__binary_value_from_refer(&rdigits, source);
-        __gg__int128_to_refer(      dest,
-                                   value,
-                                   rdigits,
-                                   rounded,
-                                   &size_error );
+        value = __gg__dirty_to_binary_internal( source->field->initial,
+                                                source->field->capacity,
+                                                &rdigits );
+        __gg__int128_to_refer(dest,
+                              value,
+                              rdigits,
+                              rounded,
+                              &size_error );
         break;
 
       case FldAlphaEdited:
@@ -5294,15 +5295,11 @@ __gg__move_literala(struct cblc_refer_t *dest,
           }
         else
           {
-          display_string = format_for_display_internal(
-                            &display_string,
-                            &display_string_size,
-                            source->field,
-                            (unsigned char *)source->qual_data,
-                            source->qual_size,
-                            source->address_of);
-          display_string_length = strlen(display_string);
+          memset(display_string, internal_space, display_string_size);
+          size_t len = std::min(display_string_size, source->field->capacity);
+          memcpy(display_string, source->field->initial, len);
           }
+
         __gg__string_to_alpha_edited( (char *)dest->qual_data,
                                       display_string,
                                       display_string_length,
@@ -5313,10 +5310,9 @@ __gg__move_literala(struct cblc_refer_t *dest,
       case FldFloat:
         {
         char ach[256];
-        size_t len = std::min(source->qual_size, sizeof(ach)-1);
-        memcpy(ach, source->qual_data, len);
+        size_t len = std::min(source->field->capacity, sizeof(ach)-1);
+        memcpy(ach, source->field->initial, len);
         ach[len] = '\0';
-        __gg__internal_to_console_in_place(ach, len);
         switch( dest->field->capacity )
           {
           case 4:
-- 
GitLab