The following shows the translation of a small COBOL program to Java using SoftwareMining migration tools.
The primary aim of this example is to demonstrate the legibility of the generated code and it's potential future maintenance.
This simple example does not attempt to cover complex issues sich as removal of GO TO statements, removal of dead code, REDEFINEs, CICS, Pointers, etc.
Handling of such issues is covered in
download and evaluate the tool to see how your organization's code is handled.
PROGRAM-ID. LOAN.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-DATA.
05 PRINCIPAL PIC 9(9) VALUE 0.
05 INTEREST-RATE PIC 99V99 VALUE 0.
05 LOAN-LENGTH PIC 99 VALUE 0.
05 NEXT-INTEREST PIC 99V99.
05 NEXT-YEAR PIC 99.
01 CLIENT-RECORD.
05 NAME PIC X(20).
05 ADDRESS PIC X(20) OCCURS 3 TIMES.
05 ID PIC 9(4) COMP.
...
|
// Sample COBOL to Java translated code
public class Loan extends BaseService {
// Notes: 01 level WS-DATA name is simplified (Optional)
// and converted to a DAO
// The DAO handles REDEFINES, COMP, OCCURS-DEPENDING, ...
private WsData data = new WsData(this);
// Client-RECORD has been translated to ClientRecord DAO,
// but since the program does not reference ClientRecord,
// it will automatically be commented out.
// private ClientRecord clientRecord = new ClientRecord(this);
...
|
* Main entry point to program
LOAN-MAIN-001.
* -
* CLEAR SCREEN AND READ DATA
* -
IF LOAN-LENGTH > 4 THEN
COMPUTE START-YEAR = LOAN-LENGTH - 4
ELSE
COMPUTE START-YEAR = 0.
IF INTEREST-RATE > 0.4 THEN
COMPUTE START-INTEREST = INTEREST-RATE - 0.4
ELSE
COMPUTE START-INTEREST = 0
END-IF
MOVE 1 TO YEAR-ROW.
* -
* GO THRU THE NUMBER OF YEARS
* -
MOVE "% Rate->" TO DSP-NO-YRS(1).
MOVE START-YEAR TO NEXT-YEAR
PERFORM VARYING YEAR-ROW FROM 2 BY 1 UNTIL YEAR-ROW = 11
PERFORM DO-NEXT-ROW
ADD 1 TO NEXT-YEAR
END-PERFORM.
* -
* AND EXIT
* -
STOP RUN.
|
/**
* Main Entrance to program
*/
protected void loanMain () {
// -
// CLEAR SCREEN AND READ DATA
// -
if (data.getLoanLength() > 4) {
data.setStartYear(data.getLoanLength() - 4);
} else {
data.setStartYear(0);
}
if (data.getInterestRate() > 0.4) {
data.setStartInterest(data.getInterestRate() - 0.4);
} else {
data.setStartInterest(0.0);
}
data.setYearRow(1);
// -
// GO THRU THE NUMBER OF YEARS
// -
displayResult.setNoYrs(0, "% Rate->");
data.setNextYear(data.getStartYear());
// initialise loop variable
data.setYearRow(2);
while (data.getYearRow() != 11) {
doNextRow ();
data.setNextYear(data.getNextYear() + 1);
data.setYearRow(data.getYearRow() + 1);
}
// -
// AND EXIT
// -
stop();
}
|
*
* Calculates values for individual rows
*
DO-NEXT-ROW.
MOVE START-INTEREST TO NEXT-INTEREST
PERFORM VARYING INTEREST-COL FROM 1 BY 1
UNTIL INTEREST-COL = 10
MOVE NEXT-INTEREST TO DSP-RESULT(1, INTEREST-COL)
PERFORM CALCULATE
MOVE NEXT-RESULT TO DSP-RESULT(YEAR-ROW, INTEREST-COL)
ADD 0.1 TO NEXT-INTEREST
END-PERFORM.
|
/**
* Calculates values for individual rows
*/
protected void doNextRow () {
data.setNextInterest(data.getStartInterest());
data.setInterestCol(1);
while (data.getInterestCol() != 10) {
displayResult.setResult(0, data.getInterestCol() - 1
, data.getNextInterest());
calculate();
displayResult.setResult(data.getYearRow() - 1
, data.getInterestCol() - 1, data.getNextResult());
data.setNextInterest(data.getNextInterest() + 0.1);
data.setInterestCol(data.getInterestCol() + 1);
}
}
|
*
* The next paragraph calculates CELL values
*
CALCULATE.
COMPUTE INTDEC = NEXT-INTEREST / (12.0 * 100.0)
COMPUTE NUMMONTHS = NEXT-YEAR * 12.0
...
|
/**
* The next paragraph calculates CELL values
*/
protected void calculate () {
data.setIntdec(data.getNextInterest() / (12.0 * 100.0));
data.setNummonths((double)data.getNextYear() * 12.0);
...
}
|
x
Whilst we do not use cookies, the site references Google Analytics scripts which uses them.
By using this site, you agree to the use of cookies.
OK
© 2023
SoftwareMining is a trademark of Software Modernization Technologies Ltd (UK).
Registered in England company no: 07300248. Reg Offices: 79 Stevens House, Jerome Place, Kingston Upon Thames, KT1 1HX, United Kingdom.