MACRO 00000010 &CSECT PLIANF &DSALEN 00000020 .********************************************************************* 00000030 .* THIS MACRO GENERATES PROLOGUE AND RETURN CODE FOR A 00000040 .* REENTRANT ASSEMBLER SUBROUTINE CALLED BY A PL/I ROUTINE. 00000050 .* 00000060 .* PARAMETERS: 00000070 .* &CSECT : CSECTNAME FOR THE ASSEMBLER SUBROUTINE. 00000080 .* &DSALEN : LENGTH OF THE DSA ADDRESSED BY REGISTER 13, 00000090 .* IN EXCESS OF 88, MUST BE A MULTIPLE OF 8. 00000100 .* 00000110 .* CONVENTIONS: 00000120 .* START LABEL FOR THE EXECUTABLE CODE MUST BE "START". 00000130 .* RETURN TO THE CALLLER: " B RETURN ". 00000140 .* NAME OF THE DSA DSECT: "PLIDSA" . 00000150 .* BASE REGISTER : REGISTER 3. 00000160 .********************************************************************* 00000170 LCLA &IND,&LEN 00000180 &IND SETA &SYSNDX 00000190 &LEN SETA K'&CSECT 00000200 &CSECT.1 CSECT 00000210 DC CL7' ' 00000220 ORG *-&LEN 00000230 DC C'&CSECT' 00000240 DC AL1(&LEN) 00000250 SPACE 3 00000260 R0 EQU 0 00000270 R1 EQU 1 00000280 R2 EQU 2 00000290 R3 EQU 3 BASE REG, POINTS TO ENTRY 00000300 R4 EQU 4 00000310 R5 EQU 5 00000320 R6 EQU 6 00000330 R7 EQU 7 00000340 R8 EQU 8 00000350 R9 EQU 9 00000360 R10 EQU 10 00000370 R11 EQU 11 00000380 R12 EQU 12 DO NOT ALTER REGISTER 12 00000390 R13 EQU 13 BASE FOR PLIDSA DSECT 00000400 R14 EQU 14 00000410 R15 EQU 15 00000420 SPACE 3 00000430 PLIDSA DSECT 00000440 PLIFLAGS DS H 00000450 PLIOFFS DS H 00000460 PLIHSA DS F 00000470 PLILSA DS F 00000480 PLIREG14 DS F 00000490 PLIREG15 DS F 00000500 PLIREG0 DS F 00000510 PLIREG1 DS F 00000520 PLIREG2 DS F 00000530 PLIREG3 DS F 00000540 PLIREG4 DS F 00000550 PLIREG5 DS F 00000560 PLIREG6 DS F 00000570 PLIREG7 DS F 00000580 PLIREG8 DS F 00000590 PLIREG9 DS F 00000600 PLIREG10 DS F 00000610 PLIREG11 DS F 00000620 PLIREG12 DS F 00000630 PLILWS DS A 00000640 PLINAB DS A 00000650 PLIPNAB DS A 00000660 PLIENABC DS F 00000670 EJECT 00000680 &CSECT.1 CSECT 00000690 ENTRY &CSECT 00000700 &CSECT DS 0H 00000710 STM R14,R12,12(R13) 00000720 LR R3,R15 R3 : BASE REGISTER 00000730 USING &CSECT,R3 00000740 USING PLIDSA,R13 00000750 LA R0,88+&DSALEN 00000760 L R1,PLINAB R1 : NEXT AVAILABLE BYTE 00000770 ALR R0,R1 00000780 CL R0,12(R12) ENOUGH STORAGE ? 00000790 BNH ENGH&IND 00000800 L R15,116(R12) NO, 00000810 BALR R14,R15 BRANCH TO PL/I OVERFLOW ROUTINE 00000820 ENGH&IND EQU * 00000830 ST R0,76(R1) RESET NAB 00000840 ST R0,80(R1) RESET PROLOGUE NAB 00000850 ST 13,4(R1) STORE BACK-CHAIN 00000860 MVC 72(4,R1),PLILWS COPY LWS ADDRESS 00000870 LR R13,R1 R13 : BASE OF PLIDSA DSECT 00000880 MVI PLIFLAGS,X'80' SET PL/I 00000890 MVI PLIFLAGS+1,X'00' FLAGS 00000900 MVI PLIENABC+2,X'91' INITIALIZE CURRENT 00000910 MVI PLIENABC+3,X'C0' ENABLE CELLS 00000920 L R1,PLIHSA GET BACK 00000930 L R1,24(R1) PARAMETER REGISTER 00000940 B START BRANCH TO USER'S CODE 00000950 SPACE 3 00000960 RETURN EQU * 00000970 LR R0,R13 00000980 L R13,PLIHSA 00000990 L R14,PLIREG14 00001000 LM R2,R12,PLIREG2 00001010 BALR R1,R14 00001020 EJECT 00001030 MEND 00001040 00001050 PLNK TITLE 'PL/I - LINK INTERFACE' 00001060 ********************************************************************** 00001070 * PL/I INTERFACE TO LINK SVC 00001080 * 00001090 * DECLARATION : 00001100 * DCL PLILINK ENTRY(CHAR(8),...) 00001200 * OPTIONS(ASM INTER RETCODE); 00001300 * 00001400 * USE : CALL PLILINK(EPNAME,PARMS); 00001500 * 00001600 * PARAMETERS : 00001700 * EPNAME : NAME OF ENTRY POINT. 00001800 * PARMS : PARAMETERS TO BE PASSED. 00001900 * 00002000 * RETURN CODE : PASSED FROM LINKED PROGRAM 00002100 * 00002200 * MACRO USED : PLIANF 00002300 ********************************************************************** 00002400 SPACE 3 00002500 PLILINK PLIANF DSALEN 00002600 START EQU * 00002700 L R4,0(R1) GET EPNAME 00002800 LA R1,4(R1) CUT FIRST PARAMETER 00002900 MVC LINKLIST(INITLEN),LISTINIT INITIALIZE WORKSTORAGE 00003000 LA R13,0(R13) CLEAR R13 (ERROR IN MVS XA SVC 6) WS 00003100 LINK LINK EPLOC=(4),MF=(E,(1)),SF=(E,LINKLIST) 00003200 B RETURN 00003300 SPACE 00003400 LISTINIT DS 0F 00003500 LINKINIT LINK EPLOC=*-*,SF=L 00003600 INITLEN EQU *-LISTINIT 00003700 SPACE 2 00003800 PLIDSA DSECT 00003900 LINKLIST LINK EPLOC=*-*,SF=L 00004000 DS 0D 00004100 DSALEN EQU *-LINKLIST 00004200 END 00004300 00004400 PSVC TITLE 'PL/I - SVC INTERFACE' 00004500 ********************************************************************** 00004600 * PL/I INTERFACE TO GENERAL SVC 00004700 * 00004800 * DECLARATION : 00004900 * DCL PLISVC ENTRY(BIN(15,0),BIN(31,0),BIN(31,0),BIN(31,0)); 00005000 * 00005100 * USE : CALL PLISVC(SVCNR,REG0,REG1,REG15); 00005200 * 00005300 * PARAMETERS : 00005400 * SVCNR : NUMBER OF SVC TO BE EXECUTED 00005500 * REG0,REG1,REG15 : VALUES TO BE LOADED INTO REGISTERS 00005600 * 0,1,15 RESPECTIVELY ON ENTRY TO SVC. 00005700 * THEY ARE RESTORED ON RETURN FROM SVC. 00005800 * 00005900 * MACRO USED : PLIANF 00006000 ********************************************************************** 00006100 SPACE 3 00006200 PLISVC PLIANF 0 00006300 START EQU * 00006400 LM R4,R7,0(R1) GET PARAMETERS 00006500 LH R8,0(R4) GET SVCNR 00006600 L R0,0(R5) LOAD REGISTER 0 VALUE 00006700 L R1,0(R6) LOAD REGISTER 1 VALUE 00006800 L R15,0(R7) LOAD REGISTER 15 VALUE 00006900 EX R8,SVC EXECUTE SVC 00007000 ST R0,0(R5) RESTORE REGISTER 0 VALUE 00007100 ST R1,0(R6) RESTORE REGISTER 1 VALUE 00007200 ST R15,0(R7) RESTORE REGISTER 15 VALUE 00007300 B RETURN RETURN 00007400 SPACE 2 00007500 SVC SVC 0 MODEL SVC INSTRUCTION 00007600 END 00007700 00007800 PTSR TITLE 'PL/I - INTERFACE TO TSO SERVICE ROUTINES' 00007900 ********************************************************************** 00008000 * PL/I INTERFACE TO TSO SERVICE ROUTINES 00008100 * 00008200 * DECLARATION : 00008300 * DCL PLITSSR ENTRY(CHAR(8),...) 00008400 * OPTIONS(ASM INTER RETCODE); 00008500 * 00008600 * USE : CALL PLITSSR(EPNAME,PARMS); 00008700 * 00008800 * PARAMETERS : 00008900 * EPNAME : NAME OF ENTRY POINT. 00009000 * PARMS : PARAMETERS TO BE PASSED. 00009100 * 00009200 * RETURN CODE : PASSED FROM TSO SERVICE ROUTINE 00009300 * 00009400 * MACRO USED : PLIANF 00009500 ********************************************************************** 00009600 SPACE 3 00009700 PLITSSR PLIANF DSALEN 00009800 START EQU * 00009900 L R4,0(R1) GET EPNAME 00010000 LA R1,4(R1) CUT FIRST PARAMETER 00010100 LA R5,TSSRTAB-LENENTRY 00010200 LA R6,LENENTRY 00010300 LA R7,TABEND-LENENTRY 00010400 TSSRLOOP BXH R5,R6,NOTFOUND 00010500 CLC 0(LENNAME,R3),0(R5) 00010600 BNE TSSRLOOP 00010700 FOUND EQU * 00010800 L R15,16 GET CVT ADDRESS 00010900 AL R15,(LENNAME)(R5) ADD OFFSET FROM LIST ENTRY 00011000 TM 0(R15),X'80' TEST IF ADDRESS VALID 00011100 BNO NOTFOUND NO, DO NORMAL LINK 00011200 L R15,0(R15) GET SERVICE ROUTINE ADDRESS 00011300 BALR R14,R15 OFF TO SERVICE ROUTINE 00011400 B RETURN 00011500 NOTFOUND EQU * 00011600 MVC LINKLIST(INITLEN),LISTINIT INITIALIZE WORKSTORAGE 00011700 LINK LINK EPLOC=(4),MF=(E,(1)),SF=(E,LINKLIST) 00011800 B RETURN 00011900 SPACE 00012000 LISTINIT DS 0F 00012100 LINKINIT LINK EPLOC=*-*,SF=L 00012200 INITLEN EQU *-LISTINIT 00012300 SPACE 2 00012400 * TABLE OF MVS TSO SERVICE ROUTINE ADDRESSES IN CVT 00012500 SPACE 00012600 * TO ACTIVATE TABLE FOR MVS, REMOVE STARS ON EACH ENTRY 00012700 * AND ON CVT DSECT=YES AND REASSEMBLE. 00012800 SPACE 00012900 TSSRTAB DS 0F 00013000 LENNAME EQU 8 00013100 LENENTRY EQU 12 00013200 GETL DC CL(LENNAME)'IKJGETL',A(CVTGETL-CVT) 00013300 PUTL DC CL(LENNAME)'IKJPUTL',A(CVTPUTL-CVT) 00013400 PTGT DC CL(LENNAME)'IKJPTGT',A(CVTPTGT-CVT) 00013500 STCK DC CL(LENNAME)'IKJSTCK',A(CVTSTCK-CVT) 00013600 SCAN DC CL(LENNAME)'IKJSCAN',A(CVTSCAN-CVT) 00013700 PARS DC CL(LENNAME)'IKJPARS',A(CVTPARS-CVT) 00013800 DAIR DC CL(LENNAME)'IKJDAIR',A(CVTDAIR-CVT) 00013900 EHDEF DC CL(LENNAME)'IKJEHDEF',A(CVTEHDEF-CVT) 00014000 EHCIR DC CL(LENNAME)'IKJEHCIR',A(CVTEHCIR-CVT) 00014100 EFF02 DC CL(LENNAME)'IKJEFF02',A(CVTEFF02-CVT) 00014200 TABEND EQU * 00014300 SPACE 2 00014400 CVT DSECT=YES 00014500 SPACE 3 00014600 PLIDSA DSECT 00014700 LINKLIST LINK EPLOC=*-*,SF=L 00014800 DS 0D 00014900 DSALEN EQU *-LINKLIST 00015000 END 00015100