See QuineProgram.
IDENTIFICATION DIVISION. PROGRAM-ID. QUINE. AUTHOR. DAVE BURT. DATE-WRITTEN. 18-09-2002. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS. 05 WS-DATA. 09 PIC X(40) VALUE " 09 PIC X(40) VALUE ". 09 PIC X(40) VALUE ". ". 09 PIC X(40) VALUE "IDENTIFICATION DIVISION. ". 09 PIC X(40) VALUE " PROGRAM-ID. QUINE. ". 09 PIC X(40) VALUE " AUTHOR. DAVE BURT. ". 09 PIC X(40) VALUE " DATE-WRITTEN. 18-09-2002. ". 09 PIC X(40) VALUE "ENVIRONMENT DIVISION. ". 09 PIC X(40) VALUE "DATA DIVISION. ". 09 PIC X(40) VALUE " WORKING-STORAGE SECTION. ". 09 PIC X(40) VALUE " 01 WS. ". 09 PIC X(40) VALUE " 05 WS-DATA. ". 09 PIC X(40) VALUE " 05 WS-ARR PIC X(40) ". 09 PIC X(40) VALUE " OCCURS 4 REDEFINES WS-DATA. ". 09 PIC X(40) VALUE " 05 WS-INTS USAGE IS COMPUTATIONAL. ". 09 PIC X(40) VALUE " 09 WS-NDX PIC 9(4) VALUE ZERO. ". 09 PIC X(40) VALUE " 09 WS-START PIC 9(4) VALUE 3. ". 09 PIC X(40) VALUE " 09 WS-SPLIT PIC 9(4) VALUE 12. ". 09 PIC X(40) VALUE " 09 WS-CNT PIC 9(4) VALUE 51. ". 09 PIC X(40) VALUE " 01 WS-OUT-REC. ". 09 PIC X(40) VALUE " 05 FILLER PIC X(7) VALUE SPACES. ". 09 PIC X(40) VALUE " 05 WS-OUT-AREA. ". 09 PIC X(40) VALUE " 09 WS-OUT-PFX PIC X(22). ". 09 PIC X(40) VALUE " 09 WS-OUT-Q1 PIC X. ". 09 PIC X(40) VALUE " 09 WS-OUT-STR PIC x(40). ". 09 PIC X(40) VALUE " 09 WS-OUT-Q2 PIC X. ". 09 PIC X(40) VALUE " 09 WS-OUT-SFX PIC X. ". 09 PIC X(40) VALUE "PROCEDURE DIVISION. ". 09 PIC X(40) VALUE " 000-MAIN. ". 09 PIC X(40) VALUE " PERFORM VARYING WS-NDX ". 09 PIC X(40) VALUE " FROM WS-START BY 1 ". 09 PIC X(40) VALUE " UNTIL WS-NDX >= WS-SPLIT ". 09 PIC X(40) VALUE " MOVE WS-ARR(WS-NDX) TO WS-OUT-AREA ". 09 PIC X(40) VALUE " DISPLAY WS-OUT-REC ". 09 PIC X(40) VALUE " END-PERFORM ". 09 PIC X(40) VALUE " MOVE WS-ARR(1) TO WS-OUT-PFX ". 09 PIC X(40) VALUE " MOVE QUOTE TO WS-OUT-Q1 ". 09 PIC X(40) VALUE " MOVE QUOTE TO WS-OUT-Q2 ". 09 PIC X(40) VALUE " MOVE WS-ARR(2) TO WS-OUT-SFX ". 09 PIC X(40) VALUE " PERFORM VARYING WS-NDX ". 09 PIC X(40) VALUE " FROM 1 BY 1 ". 09 PIC X(40) VALUE " UNTIL WS-NDX > WS-CNT ". 09 PIC X(40) VALUE " MOVE WS-ARR(WS-NDX) TO WS-OUT-STR ". 09 PIC X(40) VALUE " DISPLAY WS-OUT-REC ". 09 PIC X(40) VALUE " END-PERFORM ". 09 PIC X(40) VALUE " PERFORM VARYING WS-NDX ". 09 PIC X(40) VALUE " FROM WS-SPLIT BY 1 ". 09 PIC X(40) VALUE " UNTIL WS-NDX > WS-CNT ". 09 PIC X(40) VALUE " MOVE WS-ARR(WS-NDX) TO WS-OUT-AREA ". 09 PIC X(40) VALUE " DISPLAY WS-OUT-REC ". 09 PIC X(40) VALUE " END-PERFORM ". 09 PIC X(40) VALUE " STOP RUN. ". 05 WS-ARR PIC X(40) OCCURS 4 REDEFINES WS-DATA. 05 WS-INTS USAGE IS COMPUTATIONAL. 09 WS-NDX PIC 9(4) VALUE ZERO. 09 WS-START PIC 9(4) VALUE 3. 09 WS-SPLIT PIC 9(4) VALUE 12. 09 WS-CNT PIC 9(4) VALUE 51. 01 WS-OUT-REC. 05 FILLER PIC X(7) VALUE SPACES. 05 WS-OUT-AREA. 09 WS-OUT-PFX PIC X(22). 09 WS-OUT-Q1 PIC X. 09 WS-OUT-STR PIC x(40). 09 WS-OUT-Q2 PIC X. 09 WS-OUT-SFX PIC X. PROCEDURE DIVISION. 000-MAIN. PERFORM VARYING WS-NDX FROM WS-START BY 1 UNTIL WS-NDX >= WS-SPLIT MOVE WS-ARR(WS-NDX) TO WS-OUT-AREA DISPLAY WS-OUT-REC END-PERFORM MOVE WS-ARR(1) TO WS-OUT-PFX MOVE QUOTE TO WS-OUT-Q1 MOVE QUOTE TO WS-OUT-Q2 MOVE WS-ARR(2) TO WS-OUT-SFX PERFORM VARYING WS-NDX FROM 1 BY 1 UNTIL WS-NDX > WS-CNT MOVE WS-ARR(WS-NDX) TO WS-OUT-STR DISPLAY WS-OUT-REC END-PERFORM PERFORM VARYING WS-NDX FROM WS-SPLIT BY 1 UNTIL WS-NDX > WS-CNT MOVE WS-ARR(WS-NDX) TO WS-OUT-AREA DISPLAY WS-OUT-REC END-PERFORM STOP RUN.-- dave@burt.id.au
Excuse: I was very bored, and saw on some QuineInManyLanguages? Web site that such a thing was missing. If I recall correctly, this is version two. CobolLanguage presents an interesting challenge in writing such things in a number of ways, not least of which is the line length limit. Also there is a shorter version by Tom Dawes-Gamble (a real COBOL programmer) at http://www.tmdg.co.uk/programing/quine.cbl.php