COMTRAN
Encyclopedia
COMTRAN is an early programming language
developed at IBM
. It was intended as the business programming equivalent of the scientific programming language FORTRAN
(FORmula TRANslator). It served as one of the forerunners to the COBOL
language. Developed by Bob Bemer
, in 1957, the language was the first to feature the programming language element known as a picture clause
.
01001 *PROCEDURE
01002 CALL (EMPLOYEE.NUMBER) EMPLOYNO,
01003 (BONDEDUCTION) BONDEDUCT,
01004 (BONDENOMINATION) BONDENOM,
01005 (BONDACCUMULATION) BONDACCUM,
01006 (INSURANCE.PREM) INSPREM,
01007 (RETIREMENT.PREM) RETPREM,
01008 (DEPARTMENT.TOTAl) DPT.
01009 START. OPEN ALL FILES.
01010 GET.MASTER. GET MASTER, AT END DO END.OF.MASTERS.
01011 GET.DETAIL. GET DETAIL, AT END GO TO END.OF.DETAILS.
01012 COMPARE.EMPLOYEE.NUMBERS. GO TO COMPUTE.PAY WHEN DETAIL EMPLOYNO
01013 IS EQUAL TO MASTER EMPLOYNO, LOW.DETAIL WHEN DETAIL
01014 EMPLOYNO IS LESS THAN MASTER EMPLOYNO.
01015 HIGH.DETAIL. MOVE 'M' TO MASTER ERRORCODE, FILE MASTER IN
01016 ERROR.FILE.
01017 GET MASTER, AT END DO END.OF.MASTERS.
01018 GO TO COMPARE.EMPLOYEE.NUMBERS.
02001 LOW.DETAIL. MOVE 'D' TO DETAIL ERRORCODE, FILE DETAIL IN
02002 ERROR.FILE.
02003 GO TO GET.DETAIL.
02004 END.OF.MASTERS. IF DETAIL EMPLOYNO = HIGH.VALUE THEN GO TO
02005 END.OF.RUN OTHERWISE SET MASTER EMPLOYNO = HIGH.VALUE.
02006 END.OF.DETAILS. IF MASTEREMPLOYNO = HIGH.VALUE THEN GO TO
02007 END.OF.RUN OTHERWISE SET DETAIL EMPLOYNO = HIGH.VALUE, GO
02008 TO COMPARE.EMPLOYEE.NUMBERS.
02009 END.OF.RUN. MOVE CORRESPONDING GRAND.TOTAL TO PAYRECORD, FILE
02010 PAYRECORD, CLOSE ALL FILES.
02011 STOP 1234.
02012 COMPUTE.PAY. IF DETAIL HOURS IS GREATER THAN 40 THEN SET DETAIL
02013 GROSS = (DETAIL HOURS - 40) * MASTER RATE * 1.5.
02014 SET DETAIL GROSS = DETAIL GROSS + MASTER RATE * 40, DO
02015 FICA.ROUTINE, DO WITHHOLDING.TAX.ROUTINE.
02016 IF MASTER BONDEDUCT IS NOT EQUAL TO ZERO THEN DO
02017 BOND.ROUTINE.
02018 DO SEARCH FOR INDEX = 1(1)12.
02019 NET. SET PAYRECORD NETPAY = DETAIL GROSS - DETAIL FICA - DETAIL
02020 WHT -DETAIL RETIREMENT - DETAIL INSURANCE - DETAIL
02021 BONDEDUCT.
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....
developed at IBM
IBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
. It was intended as the business programming equivalent of the scientific programming language FORTRAN
Fortran
Fortran is a general-purpose, procedural, imperative programming language that is especially suited to numeric computation and scientific computing...
(FORmula TRANslator). It served as one of the forerunners to the COBOL
COBOL
COBOL is one of the oldest programming languages. Its name is an acronym for COmmon Business-Oriented Language, defining its primary domain in business, finance, and administrative systems for companies and governments....
language. Developed by Bob Bemer
Bob Bemer
Robert William Bemer was a computer scientist best known for his work at IBM during the late 1950s and early 1960s.-Biography:...
, in 1957, the language was the first to feature the programming language element known as a picture clause
Picture clause
A picture clause is an element in programming languages that is used to describe a datum, by using sample characters that indicate the item characteristics and size.- History :...
.
Contributions to COBOL
Several elements of COMTRAN were incorporated into COBOL:- Picture clausePicture clauseA picture clause is an element in programming languages that is used to describe a datum, by using sample characters that indicate the item characteristics and size.- History :...
. - Paragraphing: dividing code into paragraphs (with line breaks not significant).
- Paragraph names. Assigning names to paragraphs, and jumps (GO TO's) are to a paragraph name, not to a line number.
- AT END clause on file input operations.
- Figurative constant HIGH-VALUE.
- Passing a numeric value (RETURN-CODE) back to the operating system when the program terminatesExit (operating system)On many computer operating systems, a computer process terminates its execution by making an exit system call. More generally, an exit in a multithreading environment means that a thread of execution has stopped running. The operating system reclaims resources that were used by the process...
.
Picture clause
A picture clause element defines the length of any given datum, much like a dictionary defines words. In particular a picture clause determines whether the datum contains letters and numbers, and other characteristics of the data, including format, size, and data type.Sample program
This is a sample COMTRAN program, doing payroll calculations. (From IBM F28-8043 Commercial Translator General Reference Manual.)01001 *PROCEDURE
01002 CALL (EMPLOYEE.NUMBER) EMPLOYNO,
01003 (BONDEDUCTION) BONDEDUCT,
01004 (BONDENOMINATION) BONDENOM,
01005 (BONDACCUMULATION) BONDACCUM,
01006 (INSURANCE.PREM) INSPREM,
01007 (RETIREMENT.PREM) RETPREM,
01008 (DEPARTMENT.TOTAl) DPT.
01009 START. OPEN ALL FILES.
01010 GET.MASTER. GET MASTER, AT END DO END.OF.MASTERS.
01011 GET.DETAIL. GET DETAIL, AT END GO TO END.OF.DETAILS.
01012 COMPARE.EMPLOYEE.NUMBERS. GO TO COMPUTE.PAY WHEN DETAIL EMPLOYNO
01013 IS EQUAL TO MASTER EMPLOYNO, LOW.DETAIL WHEN DETAIL
01014 EMPLOYNO IS LESS THAN MASTER EMPLOYNO.
01015 HIGH.DETAIL. MOVE 'M' TO MASTER ERRORCODE, FILE MASTER IN
01016 ERROR.FILE.
01017 GET MASTER, AT END DO END.OF.MASTERS.
01018 GO TO COMPARE.EMPLOYEE.NUMBERS.
02001 LOW.DETAIL. MOVE 'D' TO DETAIL ERRORCODE, FILE DETAIL IN
02002 ERROR.FILE.
02003 GO TO GET.DETAIL.
02004 END.OF.MASTERS. IF DETAIL EMPLOYNO = HIGH.VALUE THEN GO TO
02005 END.OF.RUN OTHERWISE SET MASTER EMPLOYNO = HIGH.VALUE.
02006 END.OF.DETAILS. IF MASTEREMPLOYNO = HIGH.VALUE THEN GO TO
02007 END.OF.RUN OTHERWISE SET DETAIL EMPLOYNO = HIGH.VALUE, GO
02008 TO COMPARE.EMPLOYEE.NUMBERS.
02009 END.OF.RUN. MOVE CORRESPONDING GRAND.TOTAL TO PAYRECORD, FILE
02010 PAYRECORD, CLOSE ALL FILES.
02011 STOP 1234.
02012 COMPUTE.PAY. IF DETAIL HOURS IS GREATER THAN 40 THEN SET DETAIL
02013 GROSS = (DETAIL HOURS - 40) * MASTER RATE * 1.5.
02014 SET DETAIL GROSS = DETAIL GROSS + MASTER RATE * 40, DO
02015 FICA.ROUTINE, DO WITHHOLDING.TAX.ROUTINE.
02016 IF MASTER BONDEDUCT IS NOT EQUAL TO ZERO THEN DO
02017 BOND.ROUTINE.
02018 DO SEARCH FOR INDEX = 1(1)12.
02019 NET. SET PAYRECORD NETPAY = DETAIL GROSS - DETAIL FICA - DETAIL
02020 WHT -DETAIL RETIREMENT - DETAIL INSURANCE - DETAIL
02021 BONDEDUCT.