- Create a new PL/I source file called
opdemo2.pli.
- Overwrite the skeleton contents with the following code:
OPDEMO2: 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 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 DELAY BUILTIN;
DCL PLIRETC BUILTIN;
DCL TRANSLATE BUILTIN;
/*-------------------------------------------------------------------*/
/* M O D U L E L O G I C */
/*-------------------------------------------------------------------*/
on error begin;
PUT SKIP LIST('On Error Triggered');
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 (JCLTRANS = 'DISPLAYREPLY') then
DISPLAY('STARTING OPDEMO.PLI') REPLY(reply_str);
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;
- Save the file. When the project builds, the output folder includes two
.dll files, one for each
.pli file. This is because the default output type is "All executable native libraries" in the build configuration.
Note: If any build errors occur, check if you've typed everything correctly and that the code begins in column 2.