From b7dc9357e9e3e82cbb800985d4d00b5e1a37b639 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 00:23:28 +0000 Subject: [PATCH 01/10] Fix INSPECT --- .../osscons/opensourcecobol/libcobj/common/CobolInspect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java index 83f772c0..e81d47a6 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java @@ -169,11 +169,11 @@ private static void common(AbstractCobolField f1, AbstractCobolField f2, int typ public static void init(AbstractCobolField var, int replacing) { CobolInspect.inspectVarCopy = var; CobolInspect.inspectVar = CobolInspect.inspectVarCopy; + CobolInspect.inspectSign = var.getSign(); if (inspectVar.getAttribute().isTypeNumericDisplay()) { - inspectVar.putSign(1); + inspectVar.putSign(CobolInspect.inspectSign); } CobolInspect.inspectReplacing = replacing; - CobolInspect.inspectSign = var.getSign(); CobolInspect.inspectSize = var.getFieldSize(); CobolInspect.inspectData = var.getDataStorage(); CobolInspect.inspectStart = -1; From 6d5315a2c40f2e3539bd0830262cb7aef6861787 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 02:47:19 +0000 Subject: [PATCH 02/10] Fix INSPECT --- .../libcobj/common/CobolInspect.java | 18 ++++++++++++++++-- tests/cobol85/Makefile.am | 3 ++- tests/cobol85/Makefile.in | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java index e81d47a6..631a1c07 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java @@ -170,9 +170,23 @@ public static void init(AbstractCobolField var, int replacing) { CobolInspect.inspectVarCopy = var; CobolInspect.inspectVar = CobolInspect.inspectVarCopy; CobolInspect.inspectSign = var.getSign(); - if (inspectVar.getAttribute().isTypeNumericDisplay()) { - inspectVar.putSign(CobolInspect.inspectSign); + CobolFieldAttribute attr = var.getAttribute(); + + if (attr.isTypeNumericDisplay() && CobolInspect.inspectSign < 0) { + // inspectVar.putSign(CobolInspect.inspectSign); + // inspectVar.putSign(1); + int p; + if (attr.isFlagSignLeading()) { + p = 0; + } else { + p = inspectVar.getSize() - 1; + } + + byte value = inspectVar.getDataStorage().getByte(p); + value = (byte) (value >= 0x70 ? value - 0x40 : value); + inspectVar.getDataStorage().setByte(p, value); } + CobolInspect.inspectReplacing = replacing; CobolInspect.inspectSize = var.getFieldSize(); CobolInspect.inspectData = var.getDataStorage(); diff --git a/tests/cobol85/Makefile.am b/tests/cobol85/Makefile.am index fed3626e..3a55f6bf 100755 --- a/tests/cobol85/Makefile.am +++ b/tests/cobol85/Makefile.am @@ -4,7 +4,8 @@ ## Copyright (C) 2008-2009 Roger While ## -MODULES = NC SM IC SQ IX ST SG OB IF RL +#MODULES = NC SM IC SQ IX ST SG OB IF RL +MODULES = NC MODULES_MAKEFILES = NC/Makefile SM/Makefile IC/Makefile SQ/Makefile IX/Makefile ST/Makefile SG/Makefile OB/Makefile IF/Makefile RL/Makefile EXTRA_MODULES = CM DB RW EXTRA_MODULES_MAKEFILES = CM/Makefile DB/Makefile RW/Makefile diff --git a/tests/cobol85/Makefile.in b/tests/cobol85/Makefile.in index a05e5b82..a6b5d92b 100644 --- a/tests/cobol85/Makefile.in +++ b/tests/cobol85/Makefile.in @@ -276,7 +276,8 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -MODULES = NC SM IC SQ IX ST SG OB IF RL +#MODULES = NC SM IC SQ IX ST SG OB IF RL +MODULES = NC MODULES_MAKEFILES = NC/Makefile SM/Makefile IC/Makefile SQ/Makefile IX/Makefile ST/Makefile SG/Makefile OB/Makefile IF/Makefile RL/Makefile EXTRA_MODULES = CM DB RW EXTRA_MODULES_MAKEFILES = CM/Makefile DB/Makefile RW/Makefile From 308a63cb2e956faffd03785c89fe259645c4e83d Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 03:57:54 +0000 Subject: [PATCH 03/10] Fix INSPECT --- .../opensourcecobol/libcobj/common/CobolInspect.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java index 631a1c07..dd27cd24 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java @@ -169,12 +169,9 @@ private static void common(AbstractCobolField f1, AbstractCobolField f2, int typ public static void init(AbstractCobolField var, int replacing) { CobolInspect.inspectVarCopy = var; CobolInspect.inspectVar = CobolInspect.inspectVarCopy; - CobolInspect.inspectSign = var.getSign(); CobolFieldAttribute attr = var.getAttribute(); if (attr.isTypeNumericDisplay() && CobolInspect.inspectSign < 0) { - // inspectVar.putSign(CobolInspect.inspectSign); - // inspectVar.putSign(1); int p; if (attr.isFlagSignLeading()) { p = 0; @@ -184,10 +181,11 @@ public static void init(AbstractCobolField var, int replacing) { byte value = inspectVar.getDataStorage().getByte(p); value = (byte) (value >= 0x70 ? value - 0x40 : value); - inspectVar.getDataStorage().setByte(p, value); + CobolInspect.inspectVar.getDataStorage().setByte(p, value); } CobolInspect.inspectReplacing = replacing; + CobolInspect.inspectSign = var.getSign(); CobolInspect.inspectSize = var.getFieldSize(); CobolInspect.inspectData = var.getDataStorage(); CobolInspect.inspectStart = -1; From c4e2a4bc45b28c8d8b630f5822ed54a7a88e5807 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 04:15:46 +0000 Subject: [PATCH 04/10] [WIP] Fix putSign() --- .../opensourcecobol/libcobj/data/AbstractCobolField.java | 2 +- .../osscons/opensourcecobol/libcobj/data/CobolNumericField.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java index 3042f096..b04424b1 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java @@ -1615,7 +1615,7 @@ private static int getSignEbcdic(CobolDataStorage p) { * @param p TODO: 準備中 * @param sign TODO: 準備中 */ - private static void putSignEbcdic(CobolDataStorage p, int sign) { + public static void putSignEbcdic(CobolDataStorage p, int sign) { if (sign < 0) { switch (p.getByte(0)) { case '0': diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java index 9f9ec0c0..3830fbaa 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java @@ -525,7 +525,7 @@ public void putSign(int sign) { // } else { - value = (byte) (value >= 0x70 ? value - 0x40 : value); + // value = (byte) (value >= 0x70 ? value - 0x40 : value); this.getDataStorage().setByte(p, (byte) (sign < 0 ? value + 0x40 : value)); } } From 884f82d416eaf8e105e0659fd2310cd6d58baa02 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 04:25:18 +0000 Subject: [PATCH 05/10] [WIP] Fix putSign() --- .../opensourcecobol/libcobj/data/CobolNumericField.java | 2 +- tests/cobol85/Makefile.am | 3 +-- tests/cobol85/Makefile.in | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java index 3830fbaa..9f9ec0c0 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/CobolNumericField.java @@ -525,7 +525,7 @@ public void putSign(int sign) { // } else { - // value = (byte) (value >= 0x70 ? value - 0x40 : value); + value = (byte) (value >= 0x70 ? value - 0x40 : value); this.getDataStorage().setByte(p, (byte) (sign < 0 ? value + 0x40 : value)); } } diff --git a/tests/cobol85/Makefile.am b/tests/cobol85/Makefile.am index 3a55f6bf..fed3626e 100755 --- a/tests/cobol85/Makefile.am +++ b/tests/cobol85/Makefile.am @@ -4,8 +4,7 @@ ## Copyright (C) 2008-2009 Roger While ## -#MODULES = NC SM IC SQ IX ST SG OB IF RL -MODULES = NC +MODULES = NC SM IC SQ IX ST SG OB IF RL MODULES_MAKEFILES = NC/Makefile SM/Makefile IC/Makefile SQ/Makefile IX/Makefile ST/Makefile SG/Makefile OB/Makefile IF/Makefile RL/Makefile EXTRA_MODULES = CM DB RW EXTRA_MODULES_MAKEFILES = CM/Makefile DB/Makefile RW/Makefile diff --git a/tests/cobol85/Makefile.in b/tests/cobol85/Makefile.in index a6b5d92b..a05e5b82 100644 --- a/tests/cobol85/Makefile.in +++ b/tests/cobol85/Makefile.in @@ -276,8 +276,7 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -#MODULES = NC SM IC SQ IX ST SG OB IF RL -MODULES = NC +MODULES = NC SM IC SQ IX ST SG OB IF RL MODULES_MAKEFILES = NC/Makefile SM/Makefile IC/Makefile SQ/Makefile IX/Makefile ST/Makefile SG/Makefile OB/Makefile IF/Makefile RL/Makefile EXTRA_MODULES = CM DB RW EXTRA_MODULES_MAKEFILES = CM/Makefile DB/Makefile RW/Makefile From bbf7cfe709b2f707409d1919c7ee213239bb294a Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 05:07:55 +0000 Subject: [PATCH 06/10] Fix INSPECT --- .../libcobj/common/CobolInspect.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java index dd27cd24..00c13114 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/common/CobolInspect.java @@ -169,23 +169,13 @@ private static void common(AbstractCobolField f1, AbstractCobolField f2, int typ public static void init(AbstractCobolField var, int replacing) { CobolInspect.inspectVarCopy = var; CobolInspect.inspectVar = CobolInspect.inspectVarCopy; - CobolFieldAttribute attr = var.getAttribute(); - - if (attr.isTypeNumericDisplay() && CobolInspect.inspectSign < 0) { - int p; - if (attr.isFlagSignLeading()) { - p = 0; - } else { - p = inspectVar.getSize() - 1; - } + CobolInspect.inspectSign = var.getSign(); - byte value = inspectVar.getDataStorage().getByte(p); - value = (byte) (value >= 0x70 ? value - 0x40 : value); - CobolInspect.inspectVar.getDataStorage().setByte(p, value); + if (var.getAttribute().isTypeNumericDisplay()) { + inspectVar.putSign(1); } CobolInspect.inspectReplacing = replacing; - CobolInspect.inspectSign = var.getSign(); CobolInspect.inspectSize = var.getFieldSize(); CobolInspect.inspectData = var.getDataStorage(); CobolInspect.inspectStart = -1; From 852be8a136de9e2d99897bf1f7dea944a103ade6 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 06:34:09 +0000 Subject: [PATCH 07/10] Add a test case for INSPECT --- tests/misc.at | 1 + tests/misc.src/inspect-sign.at | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/misc.src/inspect-sign.at diff --git a/tests/misc.at b/tests/misc.at index 7f8a6157..a8ea5bc4 100644 --- a/tests/misc.at +++ b/tests/misc.at @@ -50,3 +50,4 @@ m4_include([japanese-char-section-var.at]) m4_include([evaluate-switch.at]) m4_include([fserial-variable.at]) m4_include([file-handler-japanese.at]) +m4_include([inspect-sign.at]) diff --git a/tests/misc.src/inspect-sign.at b/tests/misc.src/inspect-sign.at new file mode 100644 index 00000000..d90643d1 --- /dev/null +++ b/tests/misc.src/inspect-sign.at @@ -0,0 +1,31 @@ +AT_SETUP([DISPLAY values after INSPECT execution]) + +AT_DATA([prog.cbl], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 DATA1 + 02 DATA-SIGN PIC S9(5). + 01 DATA2 + 02 DATA-SIGN-LEADING PIC S9(5) SIGN IS LEADING. + PROCEDURE DIVISION. + MAIN-RTN. + MOVE -12345 TO DATA-SIGN. + INSPECT DATA-SIGN REPLACING ALL ' ' BY '0'. + DISPLAY DATA1. + + MOVE -12345 TO DATA-SIGN-LEADING. + INSPECT DATA-SIGN-LEADING REPLACING ALL ' ' BY '0'. + DISPLAY DATA2. + STOP RUN. +]) + + +AT_CHECK([${COMPILE} prog.cbl]) +AT_CHECK([${RUN_MODULE} prog], [0], +[1234u +q2345 +]) + +AT_CLEANUP \ No newline at end of file From 08fc6b5bef622f222710a8092de591b4cf635279 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Fri, 8 Nov 2024 06:55:19 +0000 Subject: [PATCH 08/10] Improve added test case --- tests/misc.src/inspect-sign.at | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/misc.src/inspect-sign.at b/tests/misc.src/inspect-sign.at index d90643d1..30647ac5 100644 --- a/tests/misc.src/inspect-sign.at +++ b/tests/misc.src/inspect-sign.at @@ -9,15 +9,31 @@ AT_DATA([prog.cbl], [ 02 DATA-SIGN PIC S9(5). 01 DATA2 02 DATA-SIGN-LEADING PIC S9(5) SIGN IS LEADING. + 01 DATA3 + 02 DATA-SIGN-LEADING-SEPARATE PIC S9(5) SIGN LEADING SEPARATE. + 01 DATA4 + 02 DATA-SIGN-TRAILING-SEPARATE PIC S9(5) SIGN TRAILING SEPARATE. PROCEDURE DIVISION. MAIN-RTN. MOVE -12345 TO DATA-SIGN. + DISPLAY DATA1. INSPECT DATA-SIGN REPLACING ALL ' ' BY '0'. DISPLAY DATA1. MOVE -12345 TO DATA-SIGN-LEADING. + DISPLAY DATA2. INSPECT DATA-SIGN-LEADING REPLACING ALL ' ' BY '0'. DISPLAY DATA2. + + MOVE -12345 TO DATA-SIGN-LEADING-SEPARATE. + DISPLAY DATA3. + INSPECT DATA-SIGN-LEADING-SEPARATE REPLACING ALL ' ' BY '0'. + DISPLAY DATA3. + + MOVE -12345 TO DATA-SIGN-TRAILING-SEPARATE. + DISPLAY DATA4. + INSPECT DATA-SIGN-TRAILING-SEPARATE REPLACING ALL ' ' BY '0'. + DISPLAY DATA4. STOP RUN. ]) @@ -25,7 +41,13 @@ AT_DATA([prog.cbl], [ AT_CHECK([${COMPILE} prog.cbl]) AT_CHECK([${RUN_MODULE} prog], [0], [1234u +1234u +q2345 q2345 +-12345 +-12345 +12345- +12345- ]) AT_CLEANUP \ No newline at end of file From 9cd6344beceea7da8449080396b8389145be77ce Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Tue, 12 Nov 2024 08:53:36 +0000 Subject: [PATCH 09/10] Cancel a correction --- .../opensourcecobol/libcobj/data/AbstractCobolField.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java index b04424b1..3042f096 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/data/AbstractCobolField.java @@ -1615,7 +1615,7 @@ private static int getSignEbcdic(CobolDataStorage p) { * @param p TODO: 準備中 * @param sign TODO: 準備中 */ - public static void putSignEbcdic(CobolDataStorage p, int sign) { + private static void putSignEbcdic(CobolDataStorage p, int sign) { if (sign < 0) { switch (p.getByte(0)) { case '0': From 1a297ab5c56fd25da4b47c34bf10d5857018e2e0 Mon Sep 17 00:00:00 2001 From: kio-watanabe Date: Tue, 12 Nov 2024 09:27:42 +0000 Subject: [PATCH 10/10] Change name of added test case --- tests/Makefile.am | 3 ++- tests/Makefile.in | 3 ++- tests/misc.at | 2 +- tests/misc.src/{inspect-sign.at => display-inspect-sign.at} | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) rename tests/misc.src/{inspect-sign.at => display-inspect-sign.at} (96%) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9841b799..9f52a66c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -220,7 +220,8 @@ misc_DEPENDENCIES = \ misc.src/japanese-char-section-var.at \ misc.src/evaluate-switch.at \ misc.src/fserial-variable.at \ - misc.src/file-handler-japanese.at + misc.src/file-handler-japanese.at \ + misc.src/display-inspect-sign.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/Makefile.in b/tests/Makefile.in index dad91307..2223cf9f 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -759,7 +759,8 @@ misc_DEPENDENCIES = \ misc.src/japanese-char-section-var.at \ misc.src/evaluate-switch.at \ misc.src/fserial-variable.at \ - misc.src/file-handler-japanese.at + misc.src/file-handler-japanese.at \ + misc.src/display-inspect-sign.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/misc.at b/tests/misc.at index a8ea5bc4..fce5b057 100644 --- a/tests/misc.at +++ b/tests/misc.at @@ -50,4 +50,4 @@ m4_include([japanese-char-section-var.at]) m4_include([evaluate-switch.at]) m4_include([fserial-variable.at]) m4_include([file-handler-japanese.at]) -m4_include([inspect-sign.at]) +m4_include([display-inspect-sign.at]) diff --git a/tests/misc.src/inspect-sign.at b/tests/misc.src/display-inspect-sign.at similarity index 96% rename from tests/misc.src/inspect-sign.at rename to tests/misc.src/display-inspect-sign.at index 30647ac5..562afae1 100644 --- a/tests/misc.src/inspect-sign.at +++ b/tests/misc.src/display-inspect-sign.at @@ -1,4 +1,4 @@ -AT_SETUP([DISPLAY values after INSPECT execution]) +AT_SETUP([DISPLAY values after INSPECT]) AT_DATA([prog.cbl], [ IDENTIFICATION DIVISION.