Modern Standard Features
COBOL 2002 FUNCTION-ID (GnuCOBOL; IBM Enterprise COBOL 6.4+):
31.1 User-defined functions
COBOL 2002 FUNCTION-ID (GnuCOBOL; IBM Enterprise COBOL 6.4+):
Output: Area: 19.6350.
IDENTIFICATION DIVISION.
PROGRAM-ID. USEFUNC.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION CIRCLE-AREA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-R PIC 9(5)V99 VALUE 2.5.
01 ED-AREA PIC Z(8)9.9999.
PROCEDURE DIVISION.
MOVE FUNCTION CIRCLE-AREA(WS-R) TO ED-AREA
DISPLAY "Area: " ED-AREA
STOP RUN.
END PROGRAM USEFUNC.
IDENTIFICATION DIVISION.
FUNCTION-ID. CIRCLE-AREA.
DATA DIVISION.
LINKAGE SECTION.
01 LK-RADIUS PIC 9(5)V99.
01 LK-AREA PIC 9(9)V9999.
PROCEDURE DIVISION USING LK-RADIUS RETURNING LK-AREA.
COMPUTE LK-AREA ROUNDED = FUNCTION PI * LK-RADIUS ** 2
GOBACK.
END FUNCTION CIRCLE-AREA.31.2 Pointers and dynamic storage
SET ADDRESS OF linkage-item TO pointer maps a LINKAGE description onto any storage (how COBOL walks linked lists and system control blocks).
ALLOCATE/FREE are COBOL 2002 statements (GnuCOBOL; supported in recent IBM releases). Traditional IBM code uses LE services CEEGTST/CEEFRST.
ADDRESS OF item and LENGTH OF item are special registers; SET ptr UP BY n does pointer arithmetic.
In CICS, EXEC CICS GETMAIN and SET(ADDRESS OF ...) serve the same purpose.
WORKING-STORAGE SECTION.
01 WS-PTR USAGE POINTER.
LINKAGE SECTION.
01 LK-BUFFER PIC X(1000).
* ...
ALLOCATE LK-BUFFER RETURNING WS-PTR
SET ADDRESS OF LK-BUFFER TO WS-PTR
MOVE "dynamic data" TO LK-BUFFER
FREE WS-PTR31.3 Exception handling (COBOL 2002)
Exception names (EC-SIZE-ZERO-DIVIDE, EC-BOUND-SUBSCRIPT, EC-DATA-INCOMPATIBLE, EC-I-O…) and functions EXCEPTION-STATUS, EXCEPTION-LOCATION, EXCEPTION-STATEMENT are implemented in GnuCOBOL (enable checking with -fec=... or >>TURN). RAISE signals an exception explicitly. IBM Enterprise COBOL relies instead on compiler options (SSRANGE, NUMCHECK), Language Environment condition handling (CEEHDLR), and ON SIZE ERROR/INVALID KEY phrases.
>>TURN EC-ALL CHECKING ON
...
PROCEDURE DIVISION.
DECLARATIVES.
BOUNDS-ERROR SECTION.
USE AFTER EXCEPTION CONDITION EC-BOUND-SUBSCRIPT.
BOUNDS-ERROR-PARA.
DISPLAY "Subscript error: " FUNCTION EXCEPTION-LOCATION.
END DECLARATIVES.31.4 Conditional compilation
Supported by GnuCOBOL (cobc -D ENV-TEST=1) and IBM Enterprise COBOL 6.2+ (DEFINE compiler option).
>>DEFINE ENV-TEST AS 1
>>IF ENV-TEST IS DEFINED
DISPLAY "Running in TEST configuration"
>>ELSE
DISPLAY "Running in PRODUCTION configuration"
>>END-IF31.5 Other modern features at a glance
Boolean data (PIC 1, USAGE BIT) and bit operators (B-AND, B-OR, B-XOR, B-NOT)
Partial support; IBM 6.x offers BIT-OF/BIT-TO-CHAR functions
National data (PIC N, USAGE NATIONAL) UTF-16; IBM also has PIC U UTF-8 (6.3+)
FLOAT-SHORT, FLOAT-LONG, FLOAT-DECIMAL-16/34 IEEE 754 binary and decimal floating point Typed data: TYPEDEF and TYPE
Dynamic-capacity tables (OCCURS DYNAMIC) LINE SEQUENTIAL organization Long-time vendor extension COMMIT / ROLLBACK Standardized transaction verbs
SEND / RECEIVE asynchronous messaging Little implementation support yet