Quine Program In Cobol

last modified: April 3, 2006

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


Loading...