$set ILCUTPREFIX "lnk-"
You can also use ILSMARTNEST, in conjunction with ILSMARTLINKAGE directive, to manage code as nested classes of the program class in which they are defined. In this case, it results in the LnkSum class becoming an internal class inside the Calculator class (my.pack.Calculator.LnkSum).
The default option for input arguments is by reference. If both by value and by reference are omitted then the Compiler accepts the arguments as by reference type.
To simplify the method signature you can group the arguments together. To do this, define a new group item, args:
01 args
Then, change the existing variables lnk-arg1, lnk-arg2, and lnk-sum to be 03 elementary items of the group:
01 args 03 lnk-arg1 pic 9(5) comp-3. 03 lnk-arg2 pic 9(5) comp-3. 03 lnk-sum pic 9(5) comp-3.
You can now replace all by value and by reference with the new group item - from:
procedure division using by value lnk-arg1, by value lnk-arg2, by reference lnk-sum.
To:
procedure division using args.
Your Calculator.cbl program should now look like:
$set ilsmartlinkage "my.pack" $set ilnamespace "my.pack" $set ilcutprefix "lnk-" program-id. Calculator as "Calculator". data division. working-storage section. linkage section. 01 args 03 lnk-arg1 pic 9(5) comp-3. 03 lnk-arg2 pic 9(5) comp-3. 03 lnk-sum pic 9(5) comp-3. procedure division using args. add lnk-arg1 to lnk-arg2 giving lnk-sum. goback. end program Calculator.
Also, update MainClass.java to import Args:
package com.calc; import my.pack.Calculator; import my.pack.Args; public class MainClass { public static void main(String[] args) { Calculator calc = new Calculator(); Args arguments = new Args(); arguments.setArg1(4); arguments.setArg2(2); calc.Calculator(arguments); System.out.println(arguments.getSum()); } }