Two real examples — one RPG IV, one COBOL — showing actual output from our pipeline. No demos, no approximations. What you see is what runs.
**FREE
// Invoice pricing engine
// Tier-based discount + VAT with packed-decimal precision
DCL-S InvQty PACKED(7:0);
DCL-S UnitPrice PACKED(9:2);
DCL-S CustTier CHAR(1);
DCL-S BaseAmount PACKED(11:2);
DCL-S DiscountRate PACKED(5:4);
DCL-S DiscountAmt PACKED(11:2);
DCL-S TaxRate PACKED(5:4) INZ(0.20);
DCL-S TaxAmount PACKED(11:2);
DCL-S InvoiceTotal PACKED(13:2);
DCL-S StatusMsg VARCHAR(80);
DCL-PROC CalcInvoice;
InvQty = 150;
UnitPrice = 24.99;
CustTier = 'G';
BaseAmount = InvQty * UnitPrice;
SELECT;
WHEN CustTier = 'P';
DiscountRate = 0.15;
StatusMsg = 'Platinum tier — 15% applied';
WHEN CustTier = 'G';
DiscountRate = 0.10;
StatusMsg = 'Gold tier — 10% applied';
WHEN CustTier = 'S';
DiscountRate = 0.05;
StatusMsg = 'Silver tier — 5% applied';
OTHER;
DiscountRate = 0.00;
StatusMsg = 'Standard pricing';
ENDSL;
DiscountAmt = BaseAmount * DiscountRate;
TaxAmount = (BaseAmount - DiscountAmt) * TaxRate;
InvoiceTotal = BaseAmount - DiscountAmt + TaxAmount;
DSPLY StatusMsg;
DSPLY ('Base: ' + %CHAR(BaseAmount));
DSPLY ('Discount: ' + %CHAR(DiscountAmt));
DSPLY ('Tax: ' + %CHAR(TaxAmount));
DSPLY ('TOTAL: ' + %CHAR(InvoiceTotal));
*INLR = *ON;
END-PROC;
// Generated by Language Foundry
package foundry.rpg;
import foundry.rt.*;
public class INVOICECALC {
static RpgDec invQty = RpgDec.of("0", 7, 0);
static RpgDec unitPrice = RpgDec.of("0", 9, 2);
static String custTier = " ";
static RpgDec baseAmount = RpgDec.of("0", 11, 2);
static RpgDec discountRate = RpgDec.of("0", 5, 4);
static RpgDec discountAmt = RpgDec.of("0", 11, 2);
static RpgDec taxRate = RpgDec.of("0.20", 5, 4);
static RpgDec taxAmount = RpgDec.of("0", 11, 2);
static RpgDec invoiceTotal = RpgDec.of("0", 13, 2);
static String statusMsg = "";
static void CalcInvoice() {
invQty = RpgDec.of("150", 7, 0);
unitPrice = RpgDec.of("24.99", 9, 2);
custTier = "G";
baseAmount = RpgDec.of(
invQty.big().multiply(unitPrice.big()), 11, 2);
if (custTier.trim().equals("P")) {
discountRate = RpgDec.of("0.15", 5, 4);
statusMsg = "Platinum tier — 15% applied";
} else if (custTier.trim().equals("G")) {
discountRate = RpgDec.of("0.10", 5, 4);
statusMsg = "Gold tier — 10% applied";
} else if (custTier.trim().equals("S")) {
discountRate = RpgDec.of("0.05", 5, 4);
statusMsg = "Silver tier — 5% applied";
} else {
discountRate = RpgDec.of("0.00", 5, 4);
statusMsg = "Standard pricing";
}
discountAmt = RpgDec.of(
baseAmount.big().multiply(discountRate.big()), 11, 2);
taxAmount = RpgDec.of(
baseAmount.big().subtract(discountAmt.big())
.multiply(taxRate.big()), 11, 2);
invoiceTotal = RpgDec.of(
baseAmount.big().subtract(discountAmt.big())
.add(taxAmount.big()), 13, 2);
RT.dsply(statusMsg);
RT.dsply("Base: " + RT.charOf(baseAmount));
RT.dsply("Discount: " + RT.charOf(discountAmt));
RT.dsply("Tax: " + RT.charOf(taxAmount));
RT.dsply("TOTAL: " + RT.charOf(invoiceTotal));
RT.setLR(true);
}
public static void main(String[] args) { CalcInvoice(); }
}
IDENTIFICATION DIVISION.
PROGRAM-ID. CUSTRISK.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNTER PIC 9(3) VALUE ZEROS.
01 WS-TOTAL-RISK PIC 9(5)V99 VALUE ZEROS.
01 WS-AVG-RISK PIC 9(5)V99 VALUE ZEROS.
01 WS-CUST-COUNT PIC 9(3) VALUE ZEROS.
01 CUST-TABLE.
05 CUST-ENTRY OCCURS 3 TIMES.
10 T-CUST-ID PIC 9(4).
10 T-CUST-NAME PIC X(20).
10 T-CUST-STATUS PIC X(1).
10 T-CUST-SEGMENT PIC X(1).
10 T-CUST-RISK PIC 9(3)V99.
01 COUNTRY-TABLE.
05 COUNTRY-ENTRY OCCURS 2 TIMES.
10 T-COUNTRY-CODE PIC X(2).
10 T-COUNTRY-NAME PIC X(15).
10 T-COUNTRY-RISK PIC 9(3).
PROCEDURE DIVISION.
0000-MAIN.
PERFORM 1000-INIT
PERFORM 2000-PROCESS
PERFORM 3000-REPORT
STOP RUN.
1000-INIT.
MOVE 1 TO T-CUST-ID(1)
MOVE 'ALICE SMITH ' TO T-CUST-NAME(1)
MOVE 'A' TO T-CUST-STATUS(1)
MOVE 'R' TO T-CUST-SEGMENT(1)
MOVE 050.50 TO T-CUST-RISK(1)
MOVE 2 TO T-CUST-ID(2)
MOVE 'BOB JONES ' TO T-CUST-NAME(2)
MOVE 'S' TO T-CUST-STATUS(2)
MOVE 'C' TO T-CUST-SEGMENT(2)
MOVE 120.75 TO T-CUST-RISK(2)
MOVE 3 TO T-CUST-ID(3)
MOVE 'CAROL WHITE ' TO T-CUST-NAME(3)
MOVE 'I' TO T-CUST-STATUS(3)
MOVE 'P' TO T-CUST-SEGMENT(3)
MOVE 200.00 TO T-CUST-RISK(3)
MOVE 'US' TO T-COUNTRY-CODE(1)
MOVE 10 TO T-COUNTRY-RISK(1)
MOVE 'GB' TO T-COUNTRY-CODE(2)
MOVE 20 TO T-COUNTRY-RISK(2).
2000-PROCESS.
PERFORM VARYING WS-COUNTER FROM 1 BY 1
UNTIL WS-COUNTER > 3
PERFORM 2100-EVAL-CUST
END-PERFORM.
2100-EVAL-CUST.
IF T-CUST-STATUS(WS-COUNTER) = 'A'
DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' ACTIVE'
ELSE
IF T-CUST-STATUS(WS-COUNTER) = 'S'
DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' SUSPENDED'
ELSE
DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' INACTIVE'
END-IF
END-IF
EVALUATE T-CUST-SEGMENT(WS-COUNTER)
WHEN 'R' DISPLAY 'Segment: Retail'
WHEN 'C' DISPLAY 'Segment: Corporate'
WHEN 'P' DISPLAY 'Segment: Private'
WHEN OTHER DISPLAY 'Segment: Unknown'
END-EVALUATE
ADD T-CUST-RISK(WS-COUNTER) TO WS-TOTAL-RISK
ADD 1 TO WS-CUST-COUNT.
3000-REPORT.
IF WS-CUST-COUNT > 0
COMPUTE WS-AVG-RISK = WS-TOTAL-RISK / WS-CUST-COUNT
END-IF
DISPLAY 'Total customers: ' WS-CUST-COUNT
DISPLAY 'Total risk: ' WS-TOTAL-RISK
DISPLAY 'Average risk: ' WS-AVG-RISK
PERFORM VARYING WS-COUNTER FROM 1 BY 1
UNTIL WS-COUNTER > 2
DISPLAY 'Country ' T-COUNTRY-CODE(WS-COUNTER)
' risk=' T-COUNTRY-RISK(WS-COUNTER)
END-PERFORM.
// Generated by Language Foundry
package foundry.cobol;
import foundry.rt.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Custrisk {
// --- Working Storage ---
static long WS_COUNTER = 0L;
static CobolDec WS_TOTAL_RISK = CobolDec.of(7, 2);
static CobolDec WS_AVG_RISK = CobolDec.of(7, 2);
static long WS_CUST_COUNT = 0L;
static long[] T_CUST_ID;
static String[] T_CUST_NAME;
static String[] T_CUST_STATUS;
static String[] T_CUST_SEGMENT;
static CobolDec[] T_CUST_RISK;
static String[] T_COUNTRY_CODE;
static String[] T_COUNTRY_NAME;
static long[] T_COUNTRY_RISK;
static {
T_CUST_ID = new long[3];
T_CUST_NAME = new String[3];
java.util.Arrays.fill(T_CUST_NAME, " ");
T_CUST_STATUS = new String[3];
java.util.Arrays.fill(T_CUST_STATUS, " ");
T_CUST_SEGMENT = new String[3];
java.util.Arrays.fill(T_CUST_SEGMENT, " ");
T_CUST_RISK = new CobolDec[3];
for (int i = 0; i < 3; i++) T_CUST_RISK[i] = CobolDec.of(5, 2);
T_COUNTRY_CODE = new String[2];
java.util.Arrays.fill(T_COUNTRY_CODE, " ");
T_COUNTRY_NAME = new String[2];
java.util.Arrays.fill(T_COUNTRY_NAME, " ");
T_COUNTRY_RISK = new long[2];
}
public static void main(String[] args) { run(); }
public static void run() { __0000_main(); }
static void __0000_main() {
__1000_init();
__2000_process();
__3000_report();
}
static void __1000_init() {
T_CUST_ID[0] = 1L;
T_CUST_NAME[0] = RT.padEnd("ALICE SMITH", 20);
T_CUST_STATUS[0] = "A";
T_CUST_SEGMENT[0] = "R";
T_CUST_RISK[0] = CobolDec.of("050.50", 5, 2);
T_CUST_ID[1] = 2L;
T_CUST_NAME[1] = RT.padEnd("BOB JONES", 20);
T_CUST_STATUS[1] = "S";
T_CUST_SEGMENT[1] = "C";
T_CUST_RISK[1] = CobolDec.of("120.75", 5, 2);
T_CUST_ID[2] = 3L;
T_CUST_NAME[2] = RT.padEnd("CAROL WHITE", 20);
T_CUST_STATUS[2] = "I";
T_CUST_SEGMENT[2] = "P";
T_CUST_RISK[2] = CobolDec.of("200.00", 5, 2);
T_COUNTRY_CODE[0] = "US";
T_COUNTRY_RISK[0] = 10L;
T_COUNTRY_CODE[1] = "GB";
T_COUNTRY_RISK[1] = 20L;
}
static void __2000_process() {
WS_COUNTER = 1L;
while (!(WS_COUNTER > 3L)) {
__2100_eval_cust();
WS_COUNTER += 1L;
}
}
static void __2100_eval_cust() {
int idx = (int) WS_COUNTER - 1;
if (RT.trim(T_CUST_STATUS[idx]).equals("A")) {
RT.dsply("Customer " + T_CUST_ID[idx] + " ACTIVE");
} else if (RT.trim(T_CUST_STATUS[idx]).equals("S")) {
RT.dsply("Customer " + T_CUST_ID[idx] + " SUSPENDED");
} else {
RT.dsply("Customer " + T_CUST_ID[idx] + " INACTIVE");
}
if (RT.trim(T_CUST_SEGMENT[idx]).equals("R"))
RT.dsply("Segment: Retail");
else if (RT.trim(T_CUST_SEGMENT[idx]).equals("C"))
RT.dsply("Segment: Corporate");
else if (RT.trim(T_CUST_SEGMENT[idx]).equals("P"))
RT.dsply("Segment: Private");
else
RT.dsply("Segment: Unknown");
WS_TOTAL_RISK = CobolDec.of(
CobolDec.add(WS_TOTAL_RISK.big(),
T_CUST_RISK[idx].big()), 7, 2);
WS_CUST_COUNT++;
}
static void __3000_report() {
if (WS_CUST_COUNT > 0L) {
WS_AVG_RISK = CobolDec.of(
CobolDec.div(WS_TOTAL_RISK.big(),
new BigDecimal(WS_CUST_COUNT), 6), 7, 2);
}
RT.dsply("Total customers: " + WS_CUST_COUNT);
RT.dsply("Total risk: " + WS_TOTAL_RISK.str());
RT.dsply("Average risk: " + WS_AVG_RISK.str());
WS_COUNTER = 1L;
while (!(WS_COUNTER > 2L)) {
RT.dsply("Country " + T_COUNTRY_CODE[(int)WS_COUNTER - 1]
+ " risk=" + T_COUNTRY_RISK[(int)WS_COUNTER - 1]);
WS_COUNTER += 1L;
}
}
}
We run the full pipeline — Scout, Analyst, Builder, Validator — against your actual source files and deliver a handle-rate report and sample output.