COBOL
1959fraglethistoricalimperativeobject-oriented.cob
docker run --rm --platform="linux/amd64" 100hellos/cobol:latest
MCP + fragletc
MCPstdinargs
This language supports code execution via MCP and the fragletc CLI. Stdin piping and argument passing are both supported.
Install fragletc โCOBOL is a historical imperative and object-oriented language first appearing in 1959.
Hello World
*> So... yeah, this is cobol.
*> BEGIN_FRAGLET
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_WORLD.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hello World!"
STOP RUN.
*> END_FRAGLETCoding Guide
Language Version
COBOL (GnuCOBOL 3.x), compiled to native code via C
Execution Model
- Compiled language using GnuCOBOL (cobc)
- Code is compiled to a binary, then executed
- Your fraglet is the entire program: IDENTIFICATION DIVISION through PROCEDURE DIVISION
Key Characteristics
- Free format (no leading columns required); case-insensitive keywords
- Divisions: IDENTIFICATION, ENVIRONMENT, DATA (optional), PROCEDURE
- PROGRAM-ID required; PROCEDURE DIVISION contains executable logic
- DISPLAY for output; ACCEPT for input (stdin or COMMAND-LINE)
Fragment Authoring
Write a complete COBOL program. The fraglet replaces the whole source between the markers. You must include:
- IDENTIFICATION DIVISION with PROGRAM-ID
- PROCEDURE DIVISION with your logic
- DATA DIVISION / WORKING-STORAGE SECTION when you need variables
Stdin and Args
- Read stdin: Use
ACCEPT ws-linein a loop; each ACCEPT reads one line. UseFUNCTION UPPER-CASEfor uppercase. - Command-line args: Use
ACCEPT ws-cmd FROM COMMAND-LINEto get the full command line; parse or display as needed (e.g. skip program name for "Args: ...").
Common Patterns
- Output:
DISPLAY "message" - Variables: WORKING-STORAGE SECTION,
01 my-var PIC X(20). - Numeric:
01 n PIC 99 VALUE 5. - Loop:
PERFORM UNTIL condition ... END-PERFORMorPERFORM VARYING i FROM 1 BY 1 UNTIL i > 5 ... - Uppercase:
FUNCTION UPPER-CASE(ws-line) - Trim:
FUNCTION TRIM(ws-cmd)
Examples
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, World!"
STOP RUN. IDENTIFICATION DIVISION.
PROGRAM-ID. GREET.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 99 VALUE 5.
01 B PIC 99 VALUE 10.
PROCEDURE DIVISION.
COMPUTE A = A + B
DISPLAY "Sum: " A
STOP RUN. IDENTIFICATION DIVISION.
PROGRAM-ID. SQUARES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 99.
01 S PIC 999 VALUE ZERO.
01 N PIC 99 VALUE 5.
PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > N
COMPUTE S = S + I * I
END-PERFORM
DISPLAY "Sum of squares: " S
STOP RUN.Caveats
- PROGRAM-ID must be a valid COBOL name (alphanumeric, hyphen).
- Use STOP RUN to exit cleanly.
- String length in PIC (e.g. PIC X(80)) must be large enough for input.
- GnuCOBOL supports both fixed-format (columns 8โ72) and free format (
-free); the container uses free format so you can left-justify code (no leading spaces required).
Fraglet Scripts
Cobol Fortune
#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. FORTUNE.
PROCEDURE DIVISION.
DISPLAY "COBOL: 60 years of moving decimal points."
STOP RUN.Echo Args
#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. ECHOARGS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CMD-LINE PIC X(512).
01 PROG-NAME PIC X(256).
01 ARGS-PART PIC X(256).
01 PTR PIC 9999.
01 REST-LEN PIC 9999.
01 SLASH-POS PIC 9999.
PROCEDURE DIVISION.
ACCEPT CMD-LINE FROM COMMAND-LINE
MOVE 1 TO PTR
UNSTRING CMD-LINE DELIMITED BY SPACE
INTO PROG-NAME WITH POINTER PTR
END-UNSTRING
MOVE 1 TO SLASH-POS
INSPECT PROG-NAME TALLYING SLASH-POS
FOR CHARACTERS BEFORE INITIAL "/"
IF SLASH-POS < 256
COMPUTE REST-LEN = 512 - PTR + 1
MOVE CMD-LINE(PTR:REST-LEN) TO ARGS-PART
DISPLAY "Args: " FUNCTION TRIM(ARGS-PART)
ELSE
DISPLAY "Args: " FUNCTION TRIM(CMD-LINE)
END-IF
STOP RUN.Stdin Upper
#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. STDINUPPER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-LINE PIC X(256).
PROCEDURE DIVISION.
ACCEPT WS-LINE
DISPLAY FUNCTION UPPER-CASE(FUNCTION TRIM(WS-LINE))
STOP RUN.Test
#!/usr/bin/env -S fragletc --vein=cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_WORLD.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hello World!"
STOP RUN.