Page 1 of 1

WebXCOBOL

Posted: Wed Feb 25, 2026 6:35 am
by admin
Hi everyone,

It seems like WebXCOBOL, a Cobol to C++ transpiler, is moving faster than our WebXPHP, but all of them are moving strong.....
It comes with Forensic source tracking, especifically designed for Banking, Credital, Institutional and Goverment code.
Tonight's test:

Unfortunaly we lose some indentation...

Code: Select all

       IDENTIFICATION DIVISION.
       PROGRAM-ID. INTEREST-CALC.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-CALC-DATA.
           05  WS-PRINCIPAL       PIC 9(9)V99 COMP-3 VALUE 10000.00.
           05  WS-RATE            PIC 9(2)V999 COMP-3 VALUE 0.052.
           05  WS-PERIODS         PIC 9(4) COMP VALUE 365.
           05  WS-INTEREST        PIC 9(9)V99 COMP-3.
           05  WS-TOTAL           PIC 9(9)V99 COMP-3.

       01  WS-DISPLAY.
           05  WS-DISP-PRINCIPAL  PIC $ZZZ,ZZZ,ZZ9.99.
           05  WS-DISP-INTEREST   PIC $ZZZ,ZZZ,ZZ9.99.
           05  WS-DISP-TOTAL      PIC $ZZZ,ZZZ,ZZ9.99.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           DISPLAY "--- INTEREST CALCULATION BENCHMARK ---"

           COMPUTE WS-INTEREST = WS-PRINCIPAL * WS-RATE * (WS-PERIODS / 365.25)
           COMPUTE WS-TOTAL = WS-PRINCIPAL + WS-INTEREST

           MOVE WS-PRINCIPAL TO WS-DISP-PRINCIPAL
           MOVE WS-INTEREST  TO WS-DISP-INTEREST
           MOVE WS-TOTAL     TO WS-DISP-TOTAL

           DISPLAY "PRINCIPAL: " WS-DISP-PRINCIPAL
           DISPLAY "RATE:      " WS-RATE
           DISPLAY "PERIODS:   " WS-PERIODS
           DISPLAY "INTEREST:  " WS-DISP-INTEREST
           DISPLAY "TOTAL:     " WS-DISP-TOTAL

           STOP RUN.

Code: Select all

/* WebXCOBOL Enterprise Output */
/* SOURCE-FILE: interest_calc.cob */
/* SOURCE-LINES: 35 */
// IDENTIFICATION DIVISION.
// PROGRAM-ID. INTEREST-CALC.

#include <iostream>
#include <string>
#include <cstdint>
#include <array>
#include <limits>
#include <cmath>
#include <iomanip>
#include "libwebxcob.h"

class interest__calc {
private:
	bool cob_stopped = false;
	enum ParaID { PARA_STOP = 0, PARA_INTEREST__CALC, PARA_MAIN_SECTION, PARA_MAIN_LOGIC };
	/* ENVIRONMENT DIVISION */

	// DATA DIVISION.
	// WORKING-STORAGE SECTION.
	struct {
		CobPacked<11, 2, true> ws_principal = 10000.00;	/* PIC 9(9)V99 */
		CobPacked<5, 3, true> ws_rate = 0.052;	/* PIC 9(2)V999 */
		int16_t ws_periods = 365;	/* PIC 9(4) */
		CobPacked<11, 2, true> ws_interest;	/* PIC 9(9)V99 */
		CobPacked<11, 2, true> ws_total;	/* PIC 9(9)V99 */
	} ws_calc_data;

	struct {
		CobDecimal<11, 2, false> ws_disp_principal;	/* PIC $ZZZ,ZZZ,ZZ9.99 */
		CobDecimal<11, 2, false> ws_disp_interest;	/* PIC $ZZZ,ZZZ,ZZ9.99 */
		CobDecimal<11, 2, false> ws_disp_total;	/* PIC $ZZZ,ZZZ,ZZ9.99 */
	} ws_display;

	/* LINKAGE SECTION */
	CobString<1> xml_namespace;	/* PIC X */
	CobString<1> xml_namespace_prefix;	/* PIC X */
	CobDecimal<0, 0, false> xml_nnamespace;	/* PIC N */
	CobDecimal<0, 0, false> xml_nnamespace_prefix;	/* PIC N */
	CobDecimal<0, 0, false> xml_ntext;	/* PIC N */
	CobString<1> xml_text;	/* PIC X */

	// PROCEDURE DIVISION.
	public:
		int run (int argc, char *argv[]) {
			ParaID next = PARA_INTEREST__CALC;
			while (next != PARA_STOP && !cob_stopped) {
				switch (next) {
					case PARA_INTEREST__CALC: next = para_interest__calc(); break;
					case PARA_MAIN_SECTION: next = para_main_section(); break;
					case PARA_MAIN_LOGIC: next = para_main_logic(); break;
					default: next = PARA_STOP; break;
				}
			}
			return 0;
		}
	private:

	ParaID para_interest__calc () {
		return PARA_MAIN_LOGIC;
	}

	ParaID para_main_section () {
		return PARA_STOP;
	}

	ParaID para_main_logic () {
		// DISPLAY "--- INTEREST CALCULATION BENCHMARK ---"
		std::cout << "--- INTEREST CALCULATION BENCHMARK ---" << std::endl;
		// COMPUTE WS-INTEREST = WS-PRINCIPAL * WS-RATE * (WS-PERIODS / 365.25)
		ws_calc_data.ws_interest = ((ws_calc_data.ws_principal * ws_calc_data.ws_rate) * (ws_calc_data.ws_periods / 365.25));
		// COMPUTE WS-TOTAL = WS-PRINCIPAL + WS-INTEREST
		ws_calc_data.ws_total = (ws_calc_data.ws_principal + ws_calc_data.ws_interest);
		// MOVE WS-PRINCIPAL TO WS-DISP-PRINCIPAL
		ws_display.ws_disp_principal = ws_calc_data.ws_principal;
		// MOVE WS-INTEREST  TO WS-DISP-INTEREST
		ws_display.ws_disp_interest = ws_calc_data.ws_interest;
		// MOVE WS-TOTAL     TO WS-DISP-TOTAL
		ws_display.ws_disp_total = ws_calc_data.ws_total;
		// DISPLAY "PRINCIPAL: " WS-DISP-PRINCIPAL
		std::cout << "PRINCIPAL: " << ws_display.ws_disp_principal << std::endl;
		// DISPLAY "RATE:      " WS-RATE
		std::cout << "RATE:      " << ws_calc_data.ws_rate << std::endl;
		// DISPLAY "PERIODS:   " WS-PERIODS
		std::cout << "PERIODS:   " << ws_calc_data.ws_periods << std::endl;
		// DISPLAY "INTEREST:  " WS-DISP-INTEREST
		std::cout << "INTEREST:  " << ws_display.ws_disp_interest << std::endl;
		// DISPLAY "TOTAL:     " WS-DISP-TOTAL
		std::cout << "TOTAL:     " << ws_display.ws_disp_total << std::endl;
		// STOP RUN.
		cob_stopped = true; return PARA_STOP;
		return PARA_STOP;
	}
};

int main (int argc, char *argv[]) {
	(void)argc; (void)argv;
	interest__calc program;
	int result = program.run (argc, argv);
	std::cout << "\nPress Enter to exit...";
	std::cin.get();
	return result;
}