Skip to content

Instantly share code, notes, and snippets.

@JohnArchieMckown
Created April 10, 2017 18:58
Show Gist options
  • Save JohnArchieMckown/5b973d46108bd24e0c6f9233c96176b0 to your computer and use it in GitHub Desktop.
Save JohnArchieMckown/5b973d46108bd24e0c6f9233c96176b0 to your computer and use it in GitHub Desktop.
Example static CALLs to C language sub-routines
PROCESS ADV,AWO,NOC(W),DATA(31),FSRT,FLAG(I,I)
PROCESS INTDATE(ANSI),LANG(EN),LIB,LIST,MAP
PROCESS NONUM,NUMPROC(PFD),OBJ,OPT(FULL),APOST
PROCESS RENT,RMODE(AUTO),NOSEQ,SOURCE,NOSSRANGE,
PROCESS NOTERM,TEST(NONE,NOSYM),TRUNC(BIN),VBREF,
PROCESS XREF(FULL),ZWB,FASTSRT,AR(E)
*PROCESS DYNAM <-- cannot use with C run-time
* Be sure to use a "static" CALL for C run-time routines
ID DIVISION.
PROGRAM-ID. 'COB$C'.
AUTHOR. JOHN MCKOWN.
INSTALLATION. UICI LIFE INSURANCE CENTER.
DATE-WRITTEN.
DATE-COMPILED.
SECURITY. NONE.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
SPECIAL-NAMES.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O-CONTROL.
* APPLY WRITE-ONLY ON REPORT1-FD.
*
DATA DIVISION.
*
WORKING-STORAGE SECTION.
*
LOCAL-STORAGE SECTION.
01 SYSIN-INPUT PIC X(80).
01 USERID-PLUS-1.
05 USERID PIC X(8).
05 FILLER PIC X.
77 STRING-POINTER POINTER
VALUE IS NULL.
77 STRING-VALUE PIC X(100)
VALUE IS SPACES.
77 INTEGER-VALUE PIC S9(9) BINARY
VALUE IS +1.
77 PACKED-VALUE PIC S9(5) PACKED-DECIMAL
VALUE IS +2.
77 FLOAT-VALUE COMP-2.
77 SSCANF-FORMAT-1 PIC X(100)
VALUE IS Z"%d %D(5,0) %e".
77 SSCANF-FORMAT-2 PIC X(100)
VALUE IS Z"%s".
LINKAGE SECTION.
01 INPUT-PARM PIC X(8).
*
PROCEDURE DIVISION USING INPUT-PARM.
START-UP.
MOVE LOW-VALUES TO USERID-PLUS-1.
CALL 'cuserid' USING USERID-PLUS-1
RETURNING STRING-POINTER.
* NOTE THAT cuserid TERMINATES THE USERID
* WITH A LOW-VALUE 0x00 CHARACTER.
* TRANSLATE THAT TO A BLANK.
CALL 'strlen' USING USERID-PLUS-1
RETURNING INTEGER-VALUE.
INSPECT USERID REPLACING ALL LOW-VALUES
BY SPACES.
DISPLAY '~' USERID-PLUS-1(1:INTEGER-VALUE) '~'
UPON SYSOUT.
DISPLAY '~' USERID '~'
UPON SYSOUT.
MOVE +1 TO INTEGER-VALUE.
MOVE +2 TO PACKED-VALUE.
MOVE +3.5 TO FLOAT-VALUE.
DISPLAY 'ENTER 3 NUMBERS:' UPON SYSOUT.
ACCEPT SYSIN-INPUT FROM SYSIN.
DISPLAY SYSIN-INPUT UPON SYSOUT.
CALL 'sscanf' USING SYSIN-INPUT,
SSCANF-FORMAT-1,
INTEGER-VALUE,
PACKED-VALUE,
FLOAT-VALUE.
DISPLAY 'SSCANF RC=' RETURN-CODE UPON SYSOUT.
DISPLAY "INTEGER-VALUE " INTEGER-VALUE UPON SYSOUT.
DISPLAY "PACKED-VALUE " PACKED-VALUE UPON SYSOUT.
DISPLAY "FLOAT-VALUE " FLOAT-VALUE UPON SYSOUT.
CALL 'sscanf' USING SYSIN-INPUT,
SSCANF-FORMAT-2,
STRING-VALUE.
DISPLAY 'SSCANF RC=' RETURN-CODE UPON SYSOUT.
DISPLAY STRING-VALUE UPON SYSOUT.
*
* The C subroutines may have implicitly set RETURN-CODE
* to some value. So I'll just set it to zero.
*
MOVE ZERO TO RETURN-CODE.
GOBACK
.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment