From a3a4deb2384e6d5515b6dfb19dafee66dcd29254 Mon Sep 17 00:00:00 2001 From: n-isaka Date: Wed, 30 Oct 2024 07:03:47 +0000 Subject: [PATCH 1/3] Fixed an error when MOVE to NATIONAL item --- libcob/move.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libcob/move.c b/libcob/move.c index 010f6f9..08160ea 100644 --- a/libcob/move.c +++ b/libcob/move.c @@ -1928,10 +1928,10 @@ cob_move (cob_field *src_in, cob_field *dst) } case COB_TYPE_NATIONAL: cob_move_alphanum_to_national (src, dst); - break; + return; case COB_TYPE_NATIONAL_EDITED: cob_move_alphanum_to_national_edited (src, dst); - break; + return; default: cob_move_display_to_alphanum (src, dst); return; From 163badc1d466be6681266dccbdf89858d0764bee Mon Sep 17 00:00:00 2001 From: n-isaka Date: Wed, 30 Oct 2024 07:12:15 +0000 Subject: [PATCH 2/3] Fixed an error when MOVE to NATIONAL item (not DISPLAY) --- libcob/move.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/libcob/move.c b/libcob/move.c index 08160ea..aae2a9e 100644 --- a/libcob/move.c +++ b/libcob/move.c @@ -1859,19 +1859,6 @@ cob_move (cob_field *src_in, cob_field *dst) return; } - if (COB_FIELD_TYPE (src) != COB_TYPE_GROUP) { - if ((!(COB_FIELD_TYPE (src) == COB_TYPE_NATIONAL || - COB_FIELD_TYPE (src) == COB_TYPE_NATIONAL_EDITED)) && - (COB_FIELD_TYPE (dst) == COB_TYPE_NATIONAL || - COB_FIELD_TYPE (dst) == COB_TYPE_NATIONAL_EDITED)) { - pTmp = judge_hankakujpn_exist (src, dst, &size); - if (pTmp != NULL) { - src->data = (unsigned char *)pTmp; - src->size = size; - } - } - } - /* Non-elementary move */ if (COB_FIELD_TYPE (src) == COB_TYPE_GROUP || COB_FIELD_TYPE (dst) == COB_TYPE_GROUP) { @@ -1927,9 +1914,19 @@ cob_move (cob_field *src_in, cob_field *dst) return; } case COB_TYPE_NATIONAL: + pTmp = judge_hankakujpn_exist (src, dst, &size); + if (pTmp != NULL) { + src->data = (unsigned char *)pTmp; + src->size = size; + } cob_move_alphanum_to_national (src, dst); return; case COB_TYPE_NATIONAL_EDITED: + pTmp = judge_hankakujpn_exist (src, dst, &size); + if (pTmp != NULL) { + src->data = (unsigned char *)pTmp; + src->size = size; + } cob_move_alphanum_to_national_edited (src, dst); return; default: @@ -2269,9 +2266,19 @@ cob_move (cob_field *src_in, cob_field *dst) cob_move_alphanum_to_edited (src, dst); return; case COB_TYPE_NATIONAL_EDITED: + pTmp = judge_hankakujpn_exist (src, dst, &size); + if (pTmp != NULL) { + src->data = (unsigned char *)pTmp; + src->size = size; + } cob_move_alphanum_to_national_edited (src, dst); break; case COB_TYPE_NATIONAL: + pTmp = judge_hankakujpn_exist (src, dst, &size); + if (pTmp != NULL) { + src->data = (unsigned char *)pTmp; + src->size = size; + } cob_move_alphanum_to_national (src, dst); break; default: From 7227d36508e97285b386dc1653e498f3c2ebdbb2 Mon Sep 17 00:00:00 2001 From: n-isaka Date: Wed, 30 Oct 2024 08:40:48 +0000 Subject: [PATCH 3/3] add move to N tests --- tests/testsuite | 77 +++++++++++++++++++++++++- tests/testsuite.src/i18n_sjis_pic-n.at | 38 +++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/tests/testsuite b/tests/testsuite index f7226ef..de5b176 100755 --- a/tests/testsuite +++ b/tests/testsuite @@ -1907,6 +1907,7 @@ at_help_all="1;used_binaries.at:27;compiler help and information;runmisc cobc; 1309;i18n_sjis_pic-n.at:444;PIC N Move with half-width dakuten kana.;; 1310;i18n_sjis_pic-n.at:463;PIC N Move with half-width han-dakuten kana.;; 1311;i18n_sjis_pic-n.at:482;INITIALIZE PIC N.;; +1312;i18n_sjis_pic-n.at:501;PIC N Move with NUMERIC items.;; " # List of the all the test groups. at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'` @@ -1920,7 +1921,7 @@ at_fn_validate_ranges () for at_grp do eval at_value=\$$at_grp - if test $at_value -lt 1 || test $at_value -gt 1311; then + if test $at_value -lt 1 || test $at_value -gt 1312; then $as_echo "invalid test group: $at_value" >&2 exit 1 fi @@ -224606,3 +224607,77 @@ $at_traceon; } ) 5>&1 2>&1 7>&- | eval $at_tee_pipe read at_status <"$at_status_file" #AT_STOP_1311 +#AT_START_1312 +at_fn_group_banner 1312 'i18n_sjis_pic-n.at:501' \ + "PIC N Move with NUMERIC items." " " 6 +at_xfail=no +( + $as_echo "1312. $at_setup_line: testing $at_desc ..." + $at_traceon + + +cat >prog.cob <<'_ATEOF' + + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 F0 PIC N(5). + 01 F1 PIC 9(5). + 01 F2 PIC S9(5). + 01 F3 PIC 9(5) COMP-3. + 01 F4 PIC S9(5) COMP. + PROCEDURE DIVISION. + MOVE 123 TO F1. + MOVE F1 TO F0. + DISPLAY F0. + MOVE -123 TO F2. + MOVE F2 TO F0. + DISPLAY F0. + MOVE 123 TO F3. + MOVE F3 TO F0. + DISPLAY F0. + MOVE -123 TO F4. + MOVE F4 TO F0. + DISPLAY F0. + STOP RUN. +_ATEOF + + +{ set +x +$as_echo "$at_srcdir/i18n_sjis_pic-n.at:529: \${COMPILE} -x prog.cob" +at_fn_check_prepare_notrace 'a ${...} parameter expansion' "i18n_sjis_pic-n.at:529" +( $at_check_trace; ${COMPILE} -x prog.cob +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/i18n_sjis_pic-n.at:529" +$at_failed && at_fn_log_failure +$at_traceon; } + +{ set +x +$as_echo "$at_srcdir/i18n_sjis_pic-n.at:530: ./prog" +at_fn_check_prepare_trace "i18n_sjis_pic-n.at:530" +( $at_check_trace; ./prog +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "‚O‚O‚P‚Q‚R +‚O‚O‚P‚Q‚“ +‚O‚O‚P‚Q‚R +‚O‚O‚P‚Q‚“ +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/i18n_sjis_pic-n.at:530" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_1312 diff --git a/tests/testsuite.src/i18n_sjis_pic-n.at b/tests/testsuite.src/i18n_sjis_pic-n.at index f4ccd1d..be5b0e0 100644 --- a/tests/testsuite.src/i18n_sjis_pic-n.at +++ b/tests/testsuite.src/i18n_sjis_pic-n.at @@ -497,3 +497,41 @@ AT_CHECK([${COMPILE} -x prog.cob], [0]) AT_CHECK([./prog], [0], [@@@@@]) AT_CLEANUP + +AT_SETUP([PIC N Move with NUMERIC items.]) + +AT_DATA([prog.cob], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 F0 PIC N(5). + 01 F1 PIC 9(5). + 01 F2 PIC S9(5). + 01 F3 PIC 9(5) COMP-3. + 01 F4 PIC S9(5) COMP. + PROCEDURE DIVISION. + MOVE 123 TO F1. + MOVE F1 TO F0. + DISPLAY F0. + MOVE -123 TO F2. + MOVE F2 TO F0. + DISPLAY F0. + MOVE 123 TO F3. + MOVE F3 TO F0. + DISPLAY F0. + MOVE -123 TO F4. + MOVE F4 TO F0. + DISPLAY F0. + STOP RUN. +]) + +AT_CHECK([${COMPILE} -x prog.cob], [0]) +AT_CHECK([./prog], [0], +[‚O‚O‚P‚Q‚R +‚O‚O‚P‚Q‚“ +‚O‚O‚P‚Q‚R +‚O‚O‚P‚Q‚“ +]) + +AT_CLEANUP \ No newline at end of file