* NAME: Z5186821 PRODUCT: SAS CATEGORY: RECO SYSTEM: OS * DATE: 25OCT89 STATUS: DZ+UT USAGE-ID: SYS.SYS-V56821 * * S30A abends using TSO commands with TSO/E version 2.1 * * NOTE: This is a SOURCE UPDATE; to apply, you must * (1) ensure that the target source file has not been re-numbered, * (2) change all occurrences of "*/" back to "./", and * (3) remove all comments before the first "./" card, * before using the OS IEBUPDTE utility * * To support TSO commands issued from within the SAS System, * under TSO/E Version 2, the SASTSO module and SASTSMAC module * must be modified. * * The following code automates the source code changes, the * assemble, and the link-edit of the SASTSO member in order to * correct the system abend 30A that occurs when a TSO command * is issued in SAS while under TSO/E Version 2. * * The first step of the job will execute the IBM utility IEBUPDTE * to insert and delete lines of the SASTSO member and the SASTSMAC * member in the SAS.TSRCLIB partitioned dataset. It is important * to use the the original SASTSO and SASTSMAC source code as * shipped with the installation tape for SAS Release 5.18. The * resulting code after the modifications will replace the current * SASTSO and SASTSMAC members in the SAS.TSRCLIB partitioned * dataset as referenced by the SYSUT2 ddname. * * The second step will compile the updated SASTSO code using * the ASSEMBLER H compiler. Note that the SYSLIB DDname is * referencing the 'sas.TMACLIB' and 'sas.TSRCLIB' datasets * provided with SAS Release 5.18. Also note that the updated * SASTSO code must be compiled under TSO/E Version 2. * * The third and final step will take the resulting object module * from the previous compile step and link-edit it as a * new SASTSO module. The resulting load module will be stored * in the partitioned dataset referenced by the SYSLMOD DDname. * NOTE: If you are running with ENTRY=SASLPA and SASTSO is one * of the modules used to create SASLPA, you must run the BLPALIB * job to re-link the SASLPA module. *------------------------------------------------------------------ * NOTE: * Before running the following code, make a copy of the current * SASTSO load module in your SAS load module library and a copy * of the current SASTSO and SASTSMAC members in you SAS.TSRCLIB * partitioned dataset. * * In order to run the following code you must do the following: * * 1) Change the */ to ./ in column 1 of each occurence in the * job. * 2) Locate and change the '<== VERIFY' lines which point to * the proper datasets from your SAS Release 5.18 install. * The dataset names that require verification are: * a) sas.sas518.TSRCLIB - Loaded via the BTSOSRC SAS * Release 5.18 install job * b) sas.sas518.TMACLIB - Loaded via the BTSOSRC SAS * Release 5.18 install job * c) sas.LIBRARY - Your SAS Release 5.18 load module * library * * WARNING: * If Z5180794 has been previously applied, an original copy of * SASTSO and SASTSMAC source code must be obtained in order to * apply this fix. * *------------------------------------------------------------------ * //TSOEV2 JOB (,ACCOUNT INFO),PROGRAMMER //UPDATE EXEC PGM=IEBUPDTE //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=sas.sas518.TSRCLIB,DISP=SHR <== VERIFY //SYSUT2 DD DSN=sas.sas518.TSRCLIB,DISP=SHR <== VERIFY //SYSIN DD * */ CHANGE NAME=SASTSMAC,SOURCE=0,LIST=ALL */ NUMBER SEQ1=10250001,NEW1=10250100,INCR=100,INSERT=YES AGO .ENDMAC TSOEV2 */ CHANGE NAME=SASTSO,SOURCE=0,LIST=ALL */ NUMBER SEQ1=02700032,NEW1=02700100,INCR=100,INSERT=YES GBLC &TSOE TSOEV2 &TSOE SETC '2' SET TSO/E VERSION TSOEV2 */ NUMBER SEQ1=03350001,NEW1=03350100,INCR=100,INSERT=YES IKJTSVT TSOEV2 */ DELETE SEQ1=20600001,SEQ2=20600001 */ NUMBER SEQ1=20620001,NEW1=20620100,INCR=100,INSERT=YES AIF ('&TSOE' EQ '1').TSOE010 TSOEV2 L R14,16 GET -> CVT TSOEV2 L R14,CVTTVT-CVT(,R14) GET -> TSVT TSOEV2 CLI TSVTLVER-TSVT(R14),C'2' IF VERSION 2 OR LATER TSOEV2 BL TSOE010 THEN DO IT THE NEW WAY TSOEV2 ST R8,SAVEECT SAVE OLD ECT ADDRESS TSOEV2 STACK + ENVIRON=CREATE, CREATE A NEW ENVIRONMENTTSOEV2 + ENTRY=(15), TSOEV2 + PARM=STPB, TSOEV2 + MF=(E,IOPL) TSOEV2 L R1,STPBECTA GET NEW ECT BASE TSOEV2 ST R1,SAVEECT SAVE IT TSOEV2 L R1,ECTIOWA-ECT(,R1) GET NEW IOWA TSOEV2 ST R1,ECTIOWA PUT IT IN OLD ECT TSOEV2 B NBATCH2 ELSE DO IT THE OLD WAY TSOEV2 TSOE010 DS 0H TSOEV2 .TSOE010 ANOP TSOEV2 XC ECTIOWA,ECTIOWA CLEAR CLIST STACK ADDRS TSOEV2 */ NUMBER SEQ1=21040001,NEW1=21040100,INCR=100,INSERT=YES AIF ('&TSOE' EQ '1').TSOE030 TSOEV2 L R14,16 GET -> CVT TSOEV2 L R14,CVTTVT-CVT(,R14) GET -> TSVT TSOEV2 CLI TSVTLVER-TSVT(R14),C'2' IF VERSION 2 OR LATER TSOEV2 BL TSOE030 THEN DO IT THE NEW WAY TSOEV2 L R2,ECTRCDF GET CMD'S RC FROM ECT TSOEV2 L R8,SAVEECT GET -> NEW ECT TSOEV2 ST R8,IOPLECT PUT IT IN IOPL TSOEV2 STACK + ENVIRON=DESTROY, DESTROY THE ENVIRONMENT TSOEV2 + ENTRY=(15), TSOEV2 + PARM=STPB, TSOEV2 + MF=(E,IOPL) TSOEV2 L R8,CPPLECT GET OLD ECT BASE TSOEV2 ST R8,IOPLECT PUT OLD ECT PTR IN IOPL TSOEV2 MVC ECTIOWA,SAVEIOWA RESTORE ORIGINAL IOWA TSOEV2 MVC ECTPCMD(16),SAVECMD RESTORE PRIM/2NDARY CMDSTSOEV2 ST R2,ECTRCDF SET RC IN OLD ECT TSOEV2 B OLDSTCKX TSOEV2 TSOE030 DS 0H ELSE DO IT THE OLD WAY TSOEV2 .TSOE030 ANOP TSOEV2 */ NUMBER SEQ1=25480001,NEW1=25480100,INCR=100,INSERT=YES STPBECTA DS A TSOEV2 */ NUMBER SEQ1=25750001,NEW1=25750100,INCR=100,INSERT=YES SAVEECT DS A NEW ECT ADDRESS TSOEV2 /* //* //* COMPILE THE UPDATED SASTSO SOURCE MEMBER //* //ASM EXEC PGM=IEV90,PARM='OBJECT,NODECK' //SYSUDUMP DD SYSOUT=* //SYSIN DD DSN=sas.sas518.TSRCLIB(SASTSO),DISP=SHR <== VERIFY //SYSLIB DD DSN=sas.sas518.TSRCLIB,DISP=SHR <== VERIFY // DD DSN=sas.sas518.TMACLIB,DISP=SHR <== VERIFY // DD DSN=SYS1.AMODGEN,DISP=SHR // DD DSN=SYS1.MACLIB,DISP=SHR //SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSDA,SPACE=(CYL,(5,1)) //SYSPUNCH DD SYSOUT=B //SYSPRINT DD SYSOUT=* //SYSLIN DD DSN=&&LOADSET,DISP=(NEW,PASS),UNIT=SYSDA, // SPACE=(CYL,(5,5,1)),DCB=(BLKSIZE=3200) //* //* LINK EDIT AND STORE THE MODULE IN THE SAS LOAD MODULE //* LIBRARY //* //LKED EXEC PGM=IEWL,PARM='RENT,REFR',COND=(4,LT,ASM) //SYSUDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE,DELETE) // DD * MODE AMODE(24),RMODE(24) ENTRY SASTSO NAME SASTSO(R) /* //SYSLMOD DD DSN=sas.LIBRARY,DISP=SHR <== VERIFY //SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSDA,SPACE=(CYL,(3,2))