//SFDPL2 JOB (22150000),’SFD’,MSGCLASS=A,CLASS=B, // REGION=4096K //***************************************************************** //* * //* IDENTIFY NECESSARY LOAD LIBRARIES FOR RELEASE * //* * //***************************************************************** //JOBLIB DD DSN=STV.EI80GNR.APP.L,DISP=SHR // DD DSN=TER2.SASC450F.LINKLIB,DISP=SHR //STEP1 EXEC ASMFC //ASM.SYSGO DD DSN=&&LOADSET1,DISP=(MOD,PASS),UNIT=VIO, // SPACE=(880,(500,100),,,ROUND) //ASM.SYSIN DD * PLIA TITLE ’TPump INTERFACE TO PL/I EXIT ROUTINE’ DYNAMN CSECT CNOP 0,4 B START-*(,R15) BRANCH AROUND CONSTANTS DC AL1(L’PLIAFLAG) LENGTH OF CONSTANTS PLIAFLAG DC C’ASSEMBLED AT &SYSTIME ON &SYSDATE.. BLKPLIA’ *-----------------------------------------------------------------* * G1_01 * * * * ON ENTRY: R1 -> PARAMETER LIST * * PARM 1 -> MULTI-FIELD RECORD * * FIELD 1: COMMAND CODE/RETURN CODE * * (32 BIT INTEGER) * * 0 = INITIAL CALL * * 1 = RECORD CALL * * 2 = HOST RESTART - ALSO INITIAL CALL * * 3 = CHECKPOINT * * 4 = DBC RESTART * * 5 = FINAL CALL * * 6 = W/ INFILE - ALSO INITIAL CALL * * 7 = RECEIVE RECORD CALL * * FIELD 2: DATA RECORD LENGTH * * (32 BIT INTEGER) * * FIELD 3: DATA RECORD * * (UP TO 31K BYTES) * * PARM 2 -> EXIT ROUTINE WORK WORD * * (32 BIT INTEGER) * * * * * * OPERATION: * * INITIAL CALL: * * 1) BULK LOADER LOADS THIS MODULE AND CALLS * * 2) BLKPLIA (THIS PROGRAM) WHICH CALLS * * 3) BLKPLI (PL/I PROGRAM TO ESTABLISH PL/I ENVIRONMENT) * * WHICH CALLS * * 4) BLKASM (ENTRY POINT IN THE PROGRAM) WHICH CALLS * * 5) BLKEXIT (USER EXIT PROGRAM IN PL/I). * * UPON RETURN: * * 1) BLKEXIT RETURNS TO * * 2) BLKASM WHICH PERFORMS MAGIC AND RETURNS DIRECTLY TO * * 3) BULK LOADER, THEREBY PRESERVING THE PL/I ENVIRONMENT * * FOR SUBSEQUENT CALLS. * * RECORD CALL: * * 1) BULK LOADER CALLS * * 2) BLKPLIA WHICH REVERSES THE MAGIC AND BRANCHES INTO * * 3) BLKASM WHICH CALLS * * 4) BLKEXIT WITH THE PL/I ENVIRONMENT SAVED BEFORE. * * UPON RETURN: * * 1) BLKEXIT RETURNS TO * * 2) BLKASM WHICH PERFORMS MAGIC AND RETURNS DIRECTLY TO * * 3) BULK LOADER, THEREBY PRESERVING THE PL/I ENVIRONMENT * * FOR SUBSEQUENT CALLS. * * * *-----------------------------------------------------------------* START SAVE (14,12) LR R11,R15 -> PROGRAM ENTRY POINT USING DYNAMN,R11 L R2,4(,R1) -> EXIT ROUTINE WORD L R3,0(,R1) -> COMMAND WORD L R3,0(,R3) COMMAND WORD CH R3,=H’0’ INITIAL CALL? BE INITCALL YES , DO INITIAL CODE CH R3,=H’6’ INITIAL CALL? BE INITCALL YES , DO INITIAL CODE CH R3,=H’2’ INITIAL CALL? BNE CALLPGM NO, JUST GO CALL PROGRAM *-----------------------------------------------------------------* * SETUP WORK AREA AND PL/I ENVIRONMENT * *-----------------------------------------------------------------* INITCALL LA R0,WORKALEN SR R1,R1 L R15,=V(DBCMEM) BALR R14,R15 ST R1,0(,R2) SAVE WORKAREA ADDRESS ST R1,WORKADDR SAVE WORKAREA ADDRESS LR R10,R1 -> CURRENT WORK AREA USING WORKAREA,R10 SPIE MF=(E,NOSPIE) CLEAR PASCAL INTERRUPT EXIT ST R1,SPIEPAS SAVE PASCAL SPIE MVC WRKFLAG,WRKFLAGP IDENTIFY WORK AREA XC SAVE1(12),SAVE1 CLEAR START OF SAVEAREA LA R1,SAVE1 INITIAL PROGRAM SAVE AREA ST R13,4(,R1) BACK CHAIN SAVE AREAS ST R1,8(,R13) FORW CHAIN SAVE AREAS LR R13,R1 -> NEW SAVE AREA ST R3,COMMAND KEEP COMMAND FOR LATER LA R1,PLIPARM -> STARTUP PARAMETERS L R15,=V(PLISTART) PL/I SETUP ENTRY POINT BALR R14,R15 CALL PL/I SETUP PROGRAM *-----------------------------------------------------------------* * FINAL RETURN FROM PL/I: FREE WORKAREA AND RETURN * *-----------------------------------------------------------------* L R1,SPIEPAS -> PASCALVS SPIE SPIE MF=(E,(1)) RESTORE PASCALUS SPIE L R13,4(,R13) BACK UP SAVE AREA CHAIN LR R1,R10 LA R0,WORKALEN L R15,=V(DBCMEM) BALR R14,R15 DROP R10 WORKAREA RETURN XR R15,R15 INDICATE ALL IS WELL ST R15,16(,R13) SET CALLER’S RETURN CODE RETURN (14,12) RETURN TO CALLER *-----------------------------------------------------------------* * REESTABLISH PL/I ENVIRONMENT AND CALL USER * *-----------------------------------------------------------------* ALLPGM L R10,0(R2) -> WORK AREA CALLPGM L R10,WORKADDR -> WORK AREA USING WORKAREA,R10 ST R3,COMMAND KEEP COMMAND FOR LATER LR R3,R1 SAVE -> PARMS FOR LATER LA R1,SAVE1 -> BLKPLIA SAVE AREA ST R13,4(,R1) REBUILD BACK CHAIN ST R1,8(,R13) REBUILD FORW CHAIN LM R12,R13,SAVE2 REESTABLISH PL/I ENVIRONMENT B AGAIN CALL EXIT ROUTINE DROP R10 WORKAREA DROP R11 BLKPLIA *-----------------------------------------------------------------* * PL/I CALLS HERE WITH CORRECT ENVIRONMENT * *-----------------------------------------------------------------* ENTRY BLKASM BLKASM B ASMSTART-*(,R15) BRANCH AROUND CONSTANTS DC AL1(L’ASMFLAG) LENGTH OF CONSTANTS ASMFLAG DC C’BLKASM’ ASMSTART SAVE (14,12) SAVE BLKPLI REGISTERS LR R11,R15 ADDRESS PROGRAM USING BLKASM,R11 SPIE MF=(E,NOSPIE)) CLEAR PASCAL INTERRUPT EXIT LR R4,R1 HOLD PL/I SPIE FOR LATER *-----------------------------------------------------------------* * PREPARE PROPER PL/I DSA FOR FURTHER MURGLING * *-----------------------------------------------------------------* LA R0,88 LENGTH OF NEW DSA L R1,76(,R13) -> FIRST AVAILABLE STORAGE ALR R0,R1 -> POSSIBLE END + 1 CL R0,12(,R12) ENOUGH ROOM FOR NEW DSA? BNH ENOUGH YES, GO USE IT L R15,116(,R12) NO, POINT TO OVERFLOW ROUTINE BALR R14,R15 AND CALL IT ENOUGH ST R0,76(,R1) NEW FIRST AVAILABLE STORAGE ST R13,4(,R1) BACK CHAIN SAVE AREAS MVC 72(4,R1),72(R13) COPY LIB WORKSPACE ADDRESS LR R13,R1 ADDRESS NEW DSA MVI 0(R13),X’80’ SET FLAGS IN DSA TO MVI 1(R13),X’00’ PRESERVE PL/I MVI 86(R13),X’91’ ERROR HANDLING MVI 87(R13),X’C0’ IN THE ASSEMBLER ROUTINE *-----------------------------------------------------------------* * CALL USER PL/I ROUTINE WITH ORIGINAL BULK PARMS * *-----------------------------------------------------------------* L R2,4(,R13) -> REGISTERS TO BLKASM L R2,4(,R2) -> PREVIOUS REGISTERS L R2,4(,R2) -> REGISTERS TO BLKPLI L R2,4(,R2) -> REGISTERS TO BLKPLIA L R3,24(,R2) -> PARMS TO BLKPLIA L R1,4(,R3) -> EXIT ROUTINE WORD L R10,0(,R1) -> WORK AREA L R10,WORKADDR -> WORK AREA.G1_01. USING WORKAREA,R10 CLC WRKFLAG,WRKFLAGP DID IT WORK? BE GOODWRK YES, USE IT ABEND 1,DUMP NO, ABEND RIGHT HERE GOODWRK STM R12,R13,SAVE2 SAVE PL/I ENVIRONMENT ST R4,SPIEPLI SAVE PL/I SPIE L R11,16(,R2) -> BLKPLIA ENTRY POINT DROP R11 BLKASM USING DYNAMN,R11 AIN L R1,SPIEPLI -> PLI SPIE SPIE MF=(E,(1)) RESTORE PL/I SPIE AGAIN XR R5,R5 MUST BE ZERO CALLING PL/I OI 4(R3),X’80’ LAST PARAMETER .G1_01. LR R1,R3 RESTORE ORIGINAL R1 .G1_01. L R15,=V(BLKEXIT) -> USER ROUTINE BALR R14,R15 CALL USER *-----------------------------------------------------------------* * CHECK WHETHER OR NOT TO HOLD PL/I ENVIRONMENT * *-----------------------------------------------------------------* L R1,SPIEPAS -> PASCALVS SPIE SPIE MF=(E,(1)) RESTORE PASCALVS SPIE L R13,SAVE1+4 RETURN AROUND PL/I B RETURN GO PERFORM RETURN DROP R10 WORKAREA DROP R11 BLKPLIA LTORG SPACE 2 NOSPIE SPIE MF=L SPACE 2 STRUC DC F’0’ OFFSET OF FIRST ELEMENT DC F’4’ OFFSET OF SECOND ELEMENT DC F’8’ OFFSET OF THIRD ELEMENT DC Y(31*1024,0) 31K FIXED LENGTH STRING SPACE 2 PLIPARM DC A(*+4+X’80000000’) -> PL/I INITIAL ARGUMENT DC Y(L’PLIARG) LENGTH OF PL/I INITIAL ARGUMENT PLIARG DC C’NOSTAE/’ DISABLE ERROR RECOVERY SPACE 2 WORKADDR DS F ADDRESS FOR WORKAREA .G1_01. WRKFLAGP DC C’BLKPLIA WORK AREA’ DC CL(((*-WRKFLAGP+7)/8*8)(*WRKFLAGP))’ ’ FILL TO DWORD WRKFLAGL EQU *-WRKFLAGP SPACE 2 WORKAREA DSECT WRKFLAG DS CL(WRKFLAGL) SAVE1 DS 18F SAVE AREA FOR BULKPLI COMMAND DS F SAVE2 DS 2F SPIEPAS DS F SPIEPLI DS F EXITPRM DS A AGGLOC DS 2A DS 0D ALIGN END OF WORK AREA WORKALEN EQU *-WORKAREA R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 END DYNAMN /* //STEP2 EXEC PLIXC //PLI.SYSLIN DD DSN=&&LOADSET2,DISP=(MOD,PASS),UNIT=VIO, // SPACE=(80,(250,100)) //PLI.SYSIN DD DATA,DLM=## BLKPLI: /* BULK LOADER INTERFACE TO PL/I USER EXIT ROUTINE */ PROC OPTIONS (MAIN); /* THIS PROGRAM IS CALLED BLKPLIA (THE SPECIAL EXIT ROUTINE ENTRY */ /* POINT PROGRAM, WRITTEN IN ASSEMBLER). */ /* IT THEN CALLS BLKASM (ANOTHER ENTRY POINT IN BLKPLIA). */ DCL BLKASM ENTRY; CALL BLKASM; END; ## //STEP3 EXEC PLIXCL //PLI.SYSIN DD DATA,DLM=## BLKEXIT: PROCEDURE (X,Y); /* ONLY BLKEXIT ACCEPTED HERE. */ DCL X FIXED, Y FIXED; DCL 1 PARM_LIST ALIGNED BASED(P), 10 STATUS FIXED BINARY (31,0), 10 RLENGTH FIXED BINARY (31,0), 10 BUFFER CHAR(80); DCL 1 PARM_PARM2 ALIGNED BASED(Q), 10 SEQ FIXED BINARY (31,0), 10 LEN FIXED BINARY (15,0), 10 PARAMETER CHAR(80); DCL COUNT STATIC FIXED BINARY (31,0), INSROWS STATIC FIXED BINARY (31,0), REJROWS STATIC FIXED BINARY (31,0; DCL I,NOTMATCH FIXED BINARY (31,0); DCL ADDR BUILTIN; DCL SUBSTR BUILTIN; P=ADDR(X); Q=ADDR(Y); DISPLAY(’### INSIDE PL/I INMOD ROUTINE...’); DISPLAY(P->STATUS); DISPLAY(P->RLENGTH); DISPLAY(P->BUFFER); DISPLAY(Q->SEQ); DISPLAY(Q->LEN); DISPLAY(Q->PARAMETER); SELECT (P->STATUS); WHEN (6) DO; /* Initialize */ COUNT=0; REJROWS=0; INSROWS=0; P->STATUS=0; END; WHEN (7) DO; /* Process */ DISPLAY('Processing...'); COUNT=COUNT+1; NOTMATCH=0; P->STATUS =0; DO I = 1 TO Q->LEN; IF SUBSTR(P->BUFFER,I,1) ^= SUBSTR(Q->PARAMETER,I,1) THEN DO; NOTMATCH = 1; LEAVE; END; END; IF NOTMATCH = 1 THEN DO; DISPLAY('------> REJECTED <--------'); REJROWS = REJROWS +1; P->RLENGTH = 0; END; ELSE DO; DISPLAY('------> accepted <--------'); INSROWS = INSROWS +1; END; END; WHEN (5) DO; /* Finalizing */ DISPLAY('Finalizing...'); P->STATUS=0; END; OTHERWISE DO; DISPLAY('UNKNOWN CODE...'); P->STATUS=99; END; END; DISPLAY('P->STATUS=');DISPLAY(STATUS); DISPLAY('P->RLENGTH=');DISPLAY(RLENGTH); DISPLAY('TOTAL =');DISPLAY(COUNT); DISPLAY('INSERTS=');DISPLAY(INSROWS); DISPLAY('REJROWS=');DISPLAY(REJROWS); DISPLAY('--------------------------------------------------------'); END BLKEXIT; ## //LKED.SYSIN DD * INCLUDE BLKPLI INCLUDE BLKPLIA INCLUDE CLILIB(DBCMEM) ENTRY DYNAMN NAME INMDPL2(R) /* //LKED.BLKPLIA DD DSN=*.STEP1.ASM.SYSGO,DISP=(OLD,PASS), // VOL=REF=*.STEP1.ASM.SYSGO //LKED.BLKPLI DD DSN=*.STEP2.PLI.SYSLIN,DISP=(OLD,PASS), // VOL=REF=*.STEP2.PLI.SYSLIN //LKED.CLILIB DD DISP=SHR,DSN=STV.RG20APP.APP.L,UNIT=3380, // VOLUME=SER=CNFG03 //COPY EXEC PGM=IEBGENER //SYSIN DD DUMMY //SYSPRINT DD SYSOUT=* //SYSUT2 DD DISP=(NEW,PASS),DSN=&&TEMP,UNIT=SYSDA, // DCB=(LRECL=80,BLKSIZE=1760,RECFM=FB), // SPACE=(CYL,(1,1),RLSE) //SYSUT1 DD DATA,DLM=@@ ("SASC") A0000000000000000000000000000A ("PASC") A0000000000000000000000000000A ("COBOL") A0000000000000000000000000000A ("ASSEM") A0000000000000000000000000000A ("SASC") B1111111111111111111111111111B ("PASC") B1111111111111111111111111111B ("COBOL") B1111111111111111111111111111B ("ASSEM") B1111111111111111111111111111B ("SASC") C2222222222222222222222222222C ("PASC") C2222222222222222222222222222C ("COBOL") C2222222222222222222222222222C ("ASSEM") C2222222222222222222222222222C ("PL/I") C2222222222222222222222222222C ("SASC") D3333333333333333333333333333D ("PASC") D3333333333333333333333333333D ("PL/I") D3333333333333333333333333333D ("SASC") E4444444444444444444444444444E ("PASC") E4444444444444444444444444444E ("PL/I") E4444444444444444444444444444E ("SASC") F5555555555555555555555555555F ("PASC") F5555555555555555555555555555F ("PL/I") F5555555555555555555555555555F @@ //********************************************************************** //* THIS STEP WILL ONLY DROP THE TABLES IF TPump IS NOT IN APPLY PHASE * //********************************************************************** //CREATE EXEC BTEQ .LOGON TDP5/DMD,DMD; /* INMOD TEST CASE II - PL/I */ RELEASE TPump DMD.INMODPL2; .IF ERRORCODE = 2572 THEN .GOTO NODROP; DROP TABLE DMD.LOGTABLE; DROP TABLE DMD.ET_INMODPL2; DROP TABLE DMD.UV_INMODPL2; DROP TABLE DMD.WT_INMODPL2; DROP TABLE DMD.INMODPL2; .QUIT; .LABEL NODROP; .EXIT 4; CREATE TABLE INMODPL2 (F1 CHAR(10), F2 CHAR(70)); ## //***************************************************************** //* * //* RUN TPump * //* * //***************************************************************** //LOADIT EXEC PGM=TPump,TIME=(,3) //STEPLIB DD DSN=STV.RG20.APPLOAD,DISP=SHR // DD DSN=STV.EG14MLL1.APP.L,DISP=SHR // DD DSN=STV.TG13BLD.APP.L,DISP=SHR // DD DSN=TER2.SASC450F.LINKLIB,DISP=SHR // DD DSN=*.STEP3.LKED.SYSLMOD,DISP=(OLD,PASS), // VOL=REF=*.STEP3.LKED.SYSLMOD //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSOUT DD SYSOUT=* //INDATA DD DISP=OLD,DSN=*.COPY.SYSUT2,DCB=(LRECL=80,RECFM=F), // VOL=REF=*.COPY.SYSUT2 //SYSIN DD DATA,DLM=## .LOGON TDP5/DMD,DMD; .LOGTABLE DMD.LOGTABLE_SFD; .BEGIN LOAD TABLES INMODPL2; .Layout layname1; .Field L1Fld1 1 Char(10); .Field L1Fld2 * Char(30); .Field L1Fld3 * Char(40); .DML Label DML1; INSERT INMODPL2(F1,F2) VALUES (:L1FLD1, :L1FLD2); .IMPORT INFILE INDATA INMOD INMDPL2 USING (“PL/I”) LAYOUT LAYNAME1 APPLY DML1; .End LOAD; .LOGOFF; ## C INMOD - z/OS //JCKLC1 JOB 1,’JCK’,MSGCLASS=A,NOTIFY=JCK,CLASS=B, REGION=4096K //****************************************************************** //* * //* IDENTIFY NECESSARY LOAD LIBRARIES FOR RELEASE * //* * //****************************************************************** //JOBLIB DD DISP=SHR,DSN=STV.GG10.APP.L // DD DISP=SHR,DSN=STV.GG00.APP.L // DD DISP=SHR,DSN=STV.TG00.APP.L // DD DISP=SHR,DSN=STV.RG00.APP.L // DD DISP=SHR,DSN=TER2.SASC301H.LINKLIB //C EXEC PGM=LC370B //STEPLIB DD DSN=TER2.SASC301H.LOAD,DISP=SHR // DD DSN=TER2.SASC301H.LINKLIB,DISP=SHR //SYSTERM DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(TRK,(10,10)) //SYSUT2 DD UNIT=SYSDA,SPACE=(TRK,(10,10)) //SYSLIN DD DSN=&&OBJECT,SPACE=(3200,(10,10)),DISP=(MOD,PASS), // UNIT=SYSDA //SYSLIB DD DSN=TER2.SASC301H.MACLIBC,DISP=SHR //SYSDBLIB DD DSN=&&DBGLIB,SPACE=(4080,(20,20,1)),DISP=(,PASS), // UNIT=SYSDA,DCB=(RECFM=U,BLKSIZE=4080) //SYSTMP01 DD UNIT=SYSDA,SPACE=(TRK,25) VS1 ONLY //SYSTMP02 DD UNIT=SYSDA,SPACE=(TRK,25) VS1 ONLY //SYSIN DD DATA,DLM=## /* This program is for TPump INMOD testing using C user exit routine. When this routine is activated it looks at the content of the function code passed (a->code) and depending on its value, it 0) initializes, i.e., opens a file, etc... 1) reads a record 5) acknowledges “close inmod” request. The user exit routine must return “return code”(a->code) and “length” (a->len). You should send return code = zero when no errors occur and non-zero for an error. TPump expects length = zero at the end of file. Then it sends “CLOSE INMOD” request. THE USER EXIT routine must explicitly return “return code” = ZERO to terminate the conversation. */ #include <stddef.h> #include <stdlib.h> #include <stdio.h> typedef unsigned short Int16; typedef unsigned char Int8; typedef unsigned int Int32; /* PASSING parameter structures */ typedef struct { Int32 code; Int32 len; Int8 buf[80]; } inmodbuf; typedef struct { Int32 seq; Int16 len; char param[80]; } inmodpty; static FILE *IN; static int count=0; char *memcpy(); void _dynamn(a,b) inmodbuf *a; inmodpty *b; {int code=0; char tempbuf[80]; memcpy(tempbuf,a->buf,sizeof(a->buf)); tempbuf[79]=’\0’; printf(“BEGIN--> %d %d %s\n”,a->code,a->len,tempbuf); printf(“ +++ %d %d %s\n”,b->seq ,b->len,b->param); code= (int) a->code; switch (code) { case 0: /* Here you open the file and read the first record */ printf(“## CODE=0, openinig...\n”); IN=fopen(“ddn:INDATA”,“rb”); if (! ferror(IN)) { if (! readrecord(a)) fclose(IN); }; break; case 1: /* TPump requested next record, read it */ printf(“## CODE=1, reading...\n”); if (! readrecord(a)) fclose(IN); break; case 5: /* TPump is closing INMOD routine */ a->code=0; a->len=0; printf(“## CODE=5, terminating...\n”); break; default: a->code=12; /* any number not = to zero */ a->len=0; printf(“##### UNKNOWN code ######\n”);a->code=0;a->len=0; }; memcpy(tempbuf,a->buf,sizeof(a->buf)); tempbuf[79]=’\0’; printf(“END --> %d %d %s\n”,a->code,a->len,tempbuf); printf(“ +++ %d %d %s\n”,b->seq ,b->len,b->param); } int readrecord(a) inmodbuf *a; { int rtn=0; char tempbuf[80]; if (fread((char *)&(a->buf),sizeof(a->buf),1,IN)) { count++; memcpy(tempbuf,a->buf,sizeof(a->buf)); tempbuf[79]=’\0’; printf(“ %d %s \n”,count,tempbuf); a->len=80; a->code=0; rtn=1; }; if ferror(IN) { printf(“==== error ====\n”); a->code=16; /* any non zero number */ a->len=0; }; if feof(IN) { /* EOF, set length = zero */ printf(“=== EOF ===\n”); a->code=9; a->len=9; }; return(rtn); } ## //LKED EXEC PGM=LINKEDIT,PARM=’LIST,MAP’,COND=(8,LT,C) //SYSPRINT DD SYSOUT=*,DCB=(RECFM=FBA,LRECL=121,BLKSIZE=1210) //SYSTERM DD SYSOUT=*00153 //SYSLIN DD DSN=*.C.SYSLIN,DISP=(OLD,PASS),VOL=REF=*.C.SYSLIN // DD DDNAME=SYSIN //SYSLIB DD DSN=TER2.SASC301H.SUBLIB,DISP=SHR //SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSDA,DCB=BLKSIZE=1024, // SPACE=(1024,(200,50))00158 //SYSLMOD DD DSN=JCK.INMOD.LOAD(INMODG1),DISP=MOD,UNIT=3380, // VOLUME=SER=TSO805 //SYSIN DD DATA,DLM=## NAME INMODG1(R) ## //BDLDEL EXEC PGM=IEFBR1400164 //BDLCAT EXEC PGM=TPUMP //STEPLIB DD DSN=STV.GG00.APP.L,DISP=SHR // DD DSN=STV.TG00.APP.L,DISP=SHR // DD DSN=STV.RG00.APP.L,DISP=SHR //SYSPRINT DD SYSOUT=*00171 // UNIT=SYSDA,DCB=(RECFM=F,DSORG=PS,LRECL=8244), // SPACE=(8244,(12,5)) //SYSIN DD * //******************************************************************* //* THIS STEP WILL ONLY DROP THE TABLES IF TPump NOT IN APPLY PHASE * //******************************************************************* //CREATE EXEC BTEQ //STEPLIB DD DSN=STV.GG00.APP.L,DISP=SHR // DD DSN=STV.TG00.APP.L,DISP=SHR // DD DSN=STV.RG00.APP.L,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD DATA,DLM=## .LOGON TDQ8/DBC,DBC; DROP TABLE XXXX.LOGTABLE; DROP TABLE XXXX.ET_INMODLC1; DROP TABLE XXXX.UV_INMODLC1; DROP TABLE XXXX.WT_INMODLC1; .QUIT; .LABEL NODROP; .EXIT 4; ## //****************************************************************** //* * //* RUN TPump * //* * //****************************************************************** //LOADIT EXEC PGM=TPump //STEPLIB DD DISP=SHR,DSN=STV.GG10.APP.L // DD DISP=SHR,DSN=STV.GG00.APP.L // DD DISP=SHR,DSN=STV.TG00.APP.L // DD DISP=SHR,DSN=STV.RG00.APP.L // DD DISP=SHR,DSN=TER2.SASC301H.LINKLIB // DD DISP=SHR,DSN=JCK.INMOD.LOAD,VOLUME=SER=TSO805, // UNIT=338 //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD DATA,DLM=## .LOGTABLE XXXX.LOGTABLE; .LOGON TDQ8/XXXX,XXXX; /* TEST DATAIN, DATALOC */ DROP TABLE XXXX.INMODLC1; CREATE TABLE INMODLC1 (F1 CHAR(10), F2 CHAR(70)); .BEGIN LOAD TABLES INMODLC1; .Layout layname1; .Field L1Fld1 1 Char(10); .Field L1Fld2 * Char(70); .DML Label DML1; INSERT INMODLC1(F1,F2) VALUES (:L1FLD1, :L1FLD2); .IMPORT INMOD INMODG1 USING (“AAA” “BBB”) LAYOUT LAYNAME1 APPLY DML1; .End LOAD; .LOGOFF; ## //INDATA DD DATA,DLM=## 01C AAAAAAAAAAAAAAAA 02C BBBBBBBBBBBBBBBB 03C CCCCCCCCCCCCCCCC 04C DDDDDDDDDDDDDDDD00229 ## //SELECT EXEC BTEQ //STEPLIB DD DSN=STV.GG00.APP.L,DISP=SHR // DD DSN=STV.TG00.APP.L,DISP=SHR // DD DSN=STV.RG00.APP.L,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD DATA,DLM=## .LOGON TDQ8/XXXX,XXXX; SELECT * FROM INMODLC1; .LOGOFF; ##