Skip to content

Commit 18ac914

Browse files
authored
Added funcConcatenate in CobolIntrinsic.java (#212)
1 parent 602c1dc commit 18ac914

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

libcobj/src/jp/osscons/opensourcecobol/libcobj/common/CobolIntrinsic.java

100644100755
+46
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,13 @@ public static AbstractCobolField funcNational(AbstractCobolField srcfield) {
16901690
return currField;
16911691
}
16921692

1693+
/**
1694+
* cob_intr_combined_datetimeの実装
1695+
*
1696+
* @param srcdays
1697+
* @param srctime
1698+
* @return
1699+
*/
16931700
public static AbstractCobolField funcCombinedDatetime(
16941701
AbstractCobolField srcdays, AbstractCobolField srctime) {
16951702
int srdays;
@@ -1724,4 +1731,43 @@ public static AbstractCobolField funcCombinedDatetime(
17241731
currField.getDataStorage().memcpy(buff);
17251732
return currField;
17261733
}
1734+
1735+
/**
1736+
* cob_intr_concatenateの実装
1737+
*
1738+
* @param offset
1739+
* @param length
1740+
* @param params
1741+
* @param fields
1742+
* @return
1743+
*/
1744+
public static AbstractCobolField funcConcatenate(
1745+
int offset, int length, int params, AbstractCobolField... fields) {
1746+
int calcsize = 0;
1747+
int i;
1748+
int index = 0;
1749+
int size;
1750+
byte[] data;
1751+
1752+
for (i = 0; i < params; i++) {
1753+
calcsize += fields[i].getSize();
1754+
}
1755+
CobolFieldAttribute attr =
1756+
new CobolFieldAttribute(CobolFieldAttribute.COB_TYPE_ALPHANUMERIC, 0, 0, 0, null);
1757+
AbstractCobolField field =
1758+
CobolFieldFactory.makeCobolField(calcsize, (CobolDataStorage) null, attr);
1759+
makeFieldEntry(field);
1760+
data = new byte[calcsize];
1761+
for (i = 0; i < params; i++) {
1762+
size = fields[i].getSize();
1763+
System.arraycopy(
1764+
fields[i].getDataStorage().getByteBuffer(size).array(), 0, data, index, size);
1765+
index += size;
1766+
}
1767+
currField.setDataStorage(new CobolDataStorage(data));
1768+
if (offset > 0) {
1769+
calcRefMod(currField, offset, length);
1770+
}
1771+
return currField;
1772+
}
17271773
}

tests/run.src/functions.at

-2
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ AT_CHECK([java prog], [0],
200200
AT_CLEANUP
201201

202202
AT_SETUP([FUNCTION CONCATENATE])
203-
AT_CHECK([${SKIP_TEST}])
204203

205204
AT_DATA([prog.cob], [
206205
IDENTIFICATION DIVISION.
@@ -223,7 +222,6 @@ AT_CHECK([java prog], [0],
223222
AT_CLEANUP
224223

225224
AT_SETUP([FUNCTION CONCATENATE with reference modding])
226-
AT_CHECK([${SKIP_TEST}])
227225

228226
AT_DATA([prog.cob], [
229227
IDENTIFICATION DIVISION.

0 commit comments

Comments
 (0)