Create a PL/I source file, opdemo.pli

  1. Right-click the project in the Application Explorer view and select New > PL/I Source File.
  2. In the New file name field, enter opdemo.pli. Click Finish. The editor appears with skeleton code for opdemo.pli.
  3. Overwrite the skeleton contents with the following code:
    Note: Make sure the first line of the following code begins in column 2.
     OPDEMO: PROC(JCLPARM) OPTIONS(MAIN) REORDER;
     
     
     DCL JCLPARM CHAR(20) VARYING;
    
     /*-------------------------------------------------------------------*/
     /*                        F I L E S                                  */
     /*-------------------------------------------------------------------*/
    
      DCL SYSIN FILE RECORD INPUT  ENVIRONMENT(FB RECSIZE(80));
    
      DCL SYSUT1 FILE RECORD INPUT  ENVIRONMENT(FB RECSIZE(80));
    
      DCL SYSUT2 FILE RECORD OUTPUT ENVIRONMENT(FB RECSIZE(80));
      
      DCL SYSPRINT FILE STREAM OUTPUT PRINT ENV (F RECSIZE (132));
    
     /*-------------------------------------------------------------------*/
     /*            S T R U C T U R E S    &    A R R A Y S                */
     /*-------------------------------------------------------------------*/
     /*-------------------------------------------------------------------*/
     /*                E X T E R N A L    E N T R I E S                   */
     /*-------------------------------------------------------------------*/
    
    
     /*-------------------------------------------------------------------*/
     /*                 O T H E R    V A R I A B L E S                    */
     /*-------------------------------------------------------------------*/
    
    
     DCL ACCUMULATOR     FIXED BIN(31) INIT(1);
    
     DCL ASCII_ALPHABET char(38)
       init('!ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ');
    
     DCL chTemp char(1);                                                                       
    
     DCL EBCDIC_ALPHABET char(38) init
       ('5AC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E9'x || 
        'F0F1F2F3F4F5F6F7F8F940'x);
    
     DCL EOF_SYSIN      CHAR(1) INIT('0');
     
     DCL EOF_SYSUT1     CHAR(1) INIT('0');
    
     DCL ITERATIONS     FIXED BIN(31) INIT(0);
    
     DCL JCLTRANS       CHAR(20) VARYING; 
    
     DCL REC_BUFF       char(80);
     
     DCL REPLY_STR      CHAR(120) VARYING;
     
     DCL STATIC_STR     CHAR(200) varying 
       init('Hi Dave - this is your static string');
     
     DCL SYSIN_NUM_RECS PIC '9999';
     
     DCL SYSPRINT_BUFF  CHAR(132);
     
     DCL VAR_NUMERIC    PIC '9999';
                                                                           
     /*-------------------------------------------------------------------*/
     /*              B U I L T I N     F U N C T I O N S                  */
     /*-------------------------------------------------------------------*/
     
     DCL PLIRETC BUILTIN;
     DCL TRANSLATE BUILTIN;
     DCL DELAY   BUILTIN;
     
     
     /*-------------------------------------------------------------------*/
     /*                   M O D U L E     L O G I C                       */
     /*-------------------------------------------------------------------*/
    
    
      on error begin;
        PUT SKIP LIST('On Error Triggered' || oncode());
        goto AFTERON;
      end;
    
     
      on conversion begin;
        PUT SKIP LIST('On Conversion Triggered');
        goto AFTERON;
      end;
    
      ON ENDFILE (SYSIN)
         begin;
           EOF_SYSIN = '1';
           put skip list('SYSIN EOF Reached - Num Recs: ' || 
                         sysin_num_recs);
         end;
    
    
      ON ENDFILE (SYSUT1)
         begin;
           EOF_SYSUT1 = '1';
           put skip list('SYSUT1 EOF Reached');
         end;
    
     SYSPRINT_BUFF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || /* 26 */
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || /* 52 */
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || /* 78 */
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || /* 104 */
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || /* 130 */
                     '12';
     open file(sysprint);
     PUT SKIP LIST(SYSPRINT_BUFF);
     
     put skip list('Length of JCLPARM: ' || length(jclparm));
     PUT DATA(JCLPARM);
     PUT SKIP;
    
     if (JCLPARM = 'DISPLAYREPLY') then
       do;
         DISPLAY('STARTING OPDEMO.PLI') REPLY(reply_str);
         put skip list('Reply String: ' || reply_str);
       end;
     else
       do;
       
         /* Read SYSIN to EOF */
         sysin_num_recs = '0';
         open input file(sysin);
         do while(eof_sysin = '0');
             read file(sysin) into (rec_buff);
             if (eof_sysin = '0') then
               sysin_num_recs = sysin_num_recs + 1;
         end;
         close file(sysin);
       
       end;
    
     /***********************************************************/
     /*  Open SYSUT1 and read until EOF translating records and */
     /*  Writing them to SYSUT2                                 */
     /***********************************************************/
     
     open file(sysut1) input;
     open file(sysut2) output;
    
     do while(eof_sysut1 = '0');
        read file(sysut1) into(rec_buff);
        if (eof_sysut1 = '0') then
          do;
            rec_buff = Translate(rec_buff, ascii_alphabet, ebcdic_alphabet);
            write file(sysut2) from(rec_buff);
          end;
     end;
    
     close file(sysut1);
     close file(sysut2);
    
     STARTIT:
    
     PUT SKIP DATA(ACCUMULATOR);
     ACCUMULATOR = ACCUMULATOR + 15;
     PUT SKIP DATA(ACCUMULATOR);
    
     PUT SKIP LIST('Triggering ON Unit');
     VAR_NUMERIC = 'DAVE';
     PUT SKIP DATA(VAR_NUMERIC); 
    
     AFTERON:
     PUT SKIP LIST('SLEEPING for 3 Seconds');
    
     Delay(3000);  /*  Sleep for 3 seconds */
    
     Iterations = Iterations + 1;
    
     /*  Let's run for about 6 seconds */
     If Iterations < 2 then
       goto startit;
    
     END;
    
  4. Save the file.

By default, saving a file automatically triggers a build of the project. You can see the progress of the build process in Eclipse's Console view.

Note: If any build errors occur, check if you've typed everything correctly and that the code begins in column 2.