Skip to content

Instantly share code, notes, and snippets.

@JohnArchieMckown
Last active August 29, 2015 14:22
Show Gist options
  • Save JohnArchieMckown/2de9d5d8b41095bc5f47 to your computer and use it in GitHub Desktop.
Save JohnArchieMckown/2de9d5d8b41095bc5f47 to your computer and use it in GitHub Desktop.
Example to wrap the 3270 file transfer program, IND$FILE, in another CSECT in order to: (1) make it run non-swappable (for speed) and (2) write the IND$FILE command to the z/OS SYSLOG for auditing / logging purposes.
//IND$FILE JOB (H00000I),'IND$FILE', 00010000
// CLASS=Z, 00020000
// MSGCLASS=X, 00030000
// NOTIFY=&SYSUID 00040000
//STEP010 EXEC ASMACL,PARM.ASM='OBJECT,NODECK,BATCH' 00050000
//ASM.SYSLIB DD DSN=SYS1.MACLIB, 00060000
// DISP=SHR 00070007
// DD DSN=SYS1.MODGEN, 00080000
// DISP=SHR 00090007
//ASM.SYSIN DD * 00120000
* BE SURE TO PUT IND$FILE IN SYS1.PARMLIB(IKJTSO00) AS AN 00130000
* AUTHORIZED COMMAND! 00140000
* 00150000
YREGS 00160000
IND@FILE CSECT 00170000
USING *,R11 00180000
SAVE (14,12),,IND@FILE\&SYSDATE\&SYSTIME 00190000
LR R11,R15 00200000
CNOP 0,4 00210000
BAS R1,*+76 00220000
DC 18A(0) 00230000
ST R13,4(,R1) SAVE OLD S/A POINTER IN NEW S/AW 00240000
ST R1,8(,R13) SAVE NEW S/A POINTER IN OLD S/A 00250000
LR R13,R1 POINT TO NEW S/A 00260000
L R1,4(,R13) POINT BACK 00270000
L R1,24(,R1) RESTORE ORIGINAL R1 00280000
B GO GO TO ACTUAL CODE 00290000
GOBACK DS 0H 00300000
L R1,4(,R13) GET OLD S/A POINTER 00310000
XC 4(4,R13),4(R13) KILL BACK CHAIN 00320000
XC 8(4,R1),8(R1) KILL FORWARD CHAIN 00330000
LR R13,R1 RESTORE ENTRY S/A POINTER 00340000
LR R15,R5 LOAD CONDITION CODE 00350000
RETURN (14,12),T,RC=(15) GET OTTA HERE! 00360000
GO DS 0H 00370000
OI OKSWAP+1,X'F0' 00380000
LR R2,R1 00390000
USING PSA,R0 00400000
L R3,PSATOLD MY TCB 00410000
USING TCB,R3 00420000
DROP R0 00430000
L R3,TCBTIO MY TIOT 00440000
DROP R3 00450000
USING TIOT,R3 00460000
MVC JOBNAME,TIOCNJOB 00470000
DROP R3 00480000
USING CPPL,R2 00490000
L R3,CPPLCBUF GET ADDR OF COMMAND BUFFER 00500000
DROP R2 00510000
LH R4,0(,R3) LENGTH OF COMMAND BUFFER 00520000
SH R4,=H'5' LENGTH OF COMMAND 00530000
BM NODATA 00540000
C R4,=F'99' 00550000
BL NOCH 00560000
L R4,=F'99' 00570000
NOCH DS 0H 00580000
EX R4,MOVEIT 00590000
NODATA DS 0H 00600000
LA R1,LDATA 00610000
BCTR R1,0 00620000
CLI 0(R1),C' ' 00630000
BE *-6 BACK TO THE BCTR 2 INSTRU UP 00640000
MVC 1(4,R1),MCSFLAGS 00650000
S R1,=A(LOGIT-1) 00660000
STH R1,LOGIT 00670000
LA R1,LOGIT 00680000
MVI SORE,C'S' 00690000
SLR R0,R0 00700000
WTO MF=(E,(1)) 00710000
* 00720007
* SEE IF I'M RUNNING AUTHORIZED 00730007
TESTAUTH FCTN=1,RBLEVEL=1 00740000
LTR R15,R15 00750000
BNZ CONTIN1 00760000
* 00770007
* OK, I'M AUTHORIZED, SO LETS MAKE THE ADDRESS SPACE NON-SWAPPABLE 00780007
LA R1,WAITECB 00790000
XC WAITECB,WAITECB 00800000
SYSEVENT TRANSWAP 00810000
LTR R5,R15 00820000
BNZ CONTIN2 00830007
NI OKSWAP+1,X'0F' 00840000
WAIT 1,ECB=WAITECB 00850000
CONTIN2 DS 0H 00860007
ESTAEX RECOVER, LABEL OF RECOVERY ROUTINE X00870007
CT, CREATE A NEW ESTAE LEVEL X00880007
RECORD=NO, NO LOGREC RECORD X00890007
CANCEL=NO, DO NOT INTERRUPT RECOVERY X00900007
TERM=YES INTERCEPT X22 ABENDS AS WELL 00910007
CONTIN1 DS 0H 00920000
STCOM NO PREVENT BREAK-IN BY SEND COMMAND 00930000
STBREAK NO 00940000
L R1,4(,R13) 00950000
L R15,=V(INDFXFER) 00960000
DROP R11 00970000
LM R0,R12,20(R1) 00980000
BASR R14,R15 00990000
LR R14,R15 01000000
BASR R11,0 01010000
USING *,R11 01020000
L R11,=A(IND@FILE) 01030000
DROP R11 01040000
USING IND@FILE,R11 01050000
ESTAEX 0 01060007
LA R1,LOGIT 01070000
MVI SORE,C'E' 01080000
SLR R0,R0 01090000
WTO MF=(E,(1)) 01100000
OKSWAP B RET1 01110000
SYSEVENT OKSWAP 01120000
RET1 DS 0H 01130000
STBREAK YES 01140000
STCOM YES 01150000
LR R5,R14 01160000
B GOBACK 01170000
RECOVER DS 0H 01180007
PUSH USING 01190007
USING RECOVER,R15 01200007
L R11,=A(IND@FILE) 01210007
DROP R15 01220007
POP USING 01230007
C R0,TESTNOSDWA 01240007
BE NOSDWA RATS! 01250007
USING SDWA,R1 01260007
MVC SAVE_ABCC,SDWAABCC 01270007
DROP R1 01280007
B RECOV1 01290007
NOSDWA DS 0H 01300007
ST R1,SAVE_ABCC 01310007
SLR R1,R1 01320007
RECOV1 DS 0H 01330007
LA R1,LOGIT 01340007
MVI SORE,C'X' 01350007
SLR R0,R0 01360007
WTO MF=(E,(1)) 01370007
SLR R15,R15 NO RECOVER 01380007
BR R14 RETURN TO SYSTEM 01390007
MOVEIT MVC FIRST100(0),4(R3) 01400000
LTORG * 01410000
TESTNOSDWA DC F'12' 01420007
WAITECB DS F 01430000
MCSFLAGS DC XL2'00000020' 01440000
LOGIT DC AL2(0),XL2'8200' 01450000
JOBNAME DC CL8' ' 01460000
DC C' ' 01470000
SORE DC C'S' 01480000
DC C' ' 01490000
FIRST100 DC CL100' ' 01500000
LDATA EQU * 01510000
*OGIT WTL 'IND@FILE JOBNAMEX ',MF=L 01520000
* WTO 'IND@FILE JOBNAMEX ',MF=L,ROUTCDE=11, 01530000
* MCSFLAG=(HRDCPY) 01540000
IHAPSA 01550000
IKJTCB 01560000
IKJUPT 01570000
IKJCPPL 01580000
IKJECT 01590000
IKJPSCB 01600000
TIOT DSECT 01610000
IEFTIOT1 01620000
END IND@FILE 01630000
PUNCH ' REPLACE IND@FILE' 01640007
PUNCH ' INCLUDE CMDLIB(IND$FILE)' 01650000
PUNCH ' ENTRY IND@FILE' 01660000
PUNCH ' SETCODE AC(1)' 01670000
END 01680000
//LKED.SYSLMOD DD DSN=SYS1.CMDLIB, 01690000
// DISP=SHR 01700007
//LKED.SYSLIB DD DSN=SYS1.LINKLIB, 01710000
// DISP=SHR 01720007
//LKED.CMDLIB DD DSN=SYS1.CMDLIB, 01730000
// DISP=SHR 01740007
//LKED.SYSIN DD * 01750000
NAME IND@FILE(R) 01760000
/* 01770000
// 01780000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment