図 53. PLISRTD - 入力処理ルーチンから出力処理ルーチンへのソート
//OPT14#10 JOB ...
//STEP1 EXEC IBMZCBG
//PLI.SYSIN DD *
EX109: PROC OPTIONS(MAIN);
DCL RETURN_CODE FIXED BIN(31,0);
CALL PLISRTD (' SORT FIELDS=(7,74,CH,A) ',
' RECORD TYPE=F,LENGTH=(80) ',
1048576
RETURN_CODE,
E15X,
E35X);
SELECT(RETURN_CODE);
WHEN(0) PUT SKIP EDIT
('SORT COMPLETE RETURN_CODE 0') (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 prints input before sorting*/
PROC RETURNS(CHAR(80));
DCL INFIELD CHAR(80);
ON ENDFILE(SYSIN) BEGIN;
PUT SKIP(3) EDIT ('END OF SORT PROGRAM INPUT. ',
'SORTED OUTPUT SHOULD FOLLOW')(A);
CALL PLIRETC(8); /* Signal end of input to sort*/
INFIELD = '';
GOTO ENDE15;
END;
GET FILE (SYSIN) EDIT (INFIELD) (A(80));
PUT SKIP EDIT (INFIELD)(A);
CALL PLIRETC(12); /*Input to sort continues*/
ENDE15:
RETURN(INFIELD);
END E15X;
E35X: /* Output handling routine prints the sorted records*/
PROC (INREC);
DCL INREC CHAR(80);
PUT SKIP EDIT (INREC) (A);
NEXT: CALL PLIRETC(4); /* Request next record from sort*/
END E35X;
END EX109;
/*
//GO.SYSOUT DD SYSOUT=A
//GO.SYSPRINT DD SYSOUT=A
//GO.SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,1)
//GO.SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,1)
//GO.SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,1)
//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
/*