Figure 51. PLISRTB—sorting from input handling routine to output data set
//OPT14#8 JOB ...
//STEP1 EXEC IBMZCBG
//PLI.SYSIN DD *
EX107: PROC OPTIONS(MAIN);
DCL RETURN_CODE FIXED BIN(31,0);
CALL PLISRTB (' SORT FIELDS=(7,74,CH,A) ',
' RECORD TYPE=F,LENGTH=(80) ',
1048576
RETURN_CODE,
E15X);
SELECT(RETURN_CODE);
WHEN(0) PUT SKIP EDIT
('SORT COMPLETE RETURN_CODE 0') (A);
WHEN(16) PUT SKIP EDIT
('SORT FAILED, RETURN_CODE 16') (A);
WHEN(20) PUT SKIP EDIT
('SORT MESSAGE DATASET MISSING ') (A);
OTHER PUT SKIP EDIT
('INVALID RETURN_CODE = ',RETURN_CODE)(A,F(2));
END /* select */;
CALL PLIRETC(RETURN_CODE);
/*set PL/I return code to reflect success of sort*/
E15X: /* INPUT HANDLING ROUTINE GETS RECORDS FROM THE INPUT
STREAM AND PUTS THEM BEFORE THEY ARE SORTED*/
PROC RETURNS (CHAR(80));
DCL SYSIN FILE RECORD INPUT,
INFIELD CHAR(80);
ON ENDFILE(SYSIN) BEGIN;
PUT SKIP(3) EDIT ('END OF SORT PROGRAM INPUT')(A);
CALL PLIRETC(8); /* signal that last record has
already been sent to sort*/
INFIELD = '';
GOTO ENDE15;
END;
READ FILE (SYSIN) INTO (INFIELD);
PUT SKIP EDIT (INFIELD)(A(80)); /*PRINT INPUT*/
CALL PLIRETC(12); /* request sort to include current
record and return for more*/
ENDE15:
RETURN(INFIELD);
END E15X;
END EX107;
/*
//GO.SYSIN DD *
003329HOOKER S.W. RIVERDALE, SATCHWELL LANE, BACONSFIELD
002886BOOKER R.R. ROTORUA, LINKEDGE LANE, TOBLEY
003077ROOKER & SON, LITTLETON NURSERIES, SHOLTSPAR
059334HOOK E.H. 109 ELMTREE ROAD, GANNET PARK, NORTHAMPTON
073872HOME TAVERN, WESTLEIGH
000931FOREST, IVER, BUCKS
/*
//GO.SYSPRINT DD SYSOUT=A
//GO.SORTOUT DD SYSOUT=A
//GO.SYSOUT DD SYSOUT=A
//*
//GO.SORTCNTL DD *
OPTION DYNALLOC=(3380,2),SKIPREC=2
/*