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