Thanks to everyone for the relevant notes.
Thank you Philippe for your macro.
Mine follows (just for comparison and understanding) but I've preferred yours:
MACRO
&NAME TBIT &ACT,&VAR,&BIT
&NAME LR R14,&BIT
SR R15,R15
SRDL R14,3
LA R14,&VAR.(R14)
SRL R15,29
AIF ('&ACT' EQ 'OFF').OFF
IC R15,=X'8040201008040201'(R15)
AIF ('&ACT' EQ 'TEST').TEST
OI 0(R14),*-*
EX R15,*-4
MEXIT
.TEST TM 0(R14),*-*
EX R15,*-4
MEXIT
.OFF IC R15,=X'7FBFDFEFF7FBFDFE'(R15)
B N&SYSNDX
NI 0(R14),*-*
N&SYSNDX EX R15,*-4
MEND
Regards
João
-----Mensagem original-----
De: IBM Mainframe Assembler List <[email protected]> Em nome de
Philippe Leite
Enviada em: quinta-feira, 20 de maio de 2021 15:18
Para: [email protected]
Assunto: Re: Macro to set a bit string
A little fix related to LLILF position:
MACRO
TBIT &ACTION,&ARRAY,&BIT
LCLC &TBTIX
&TBTIX SETC 'TBT'.'&SYSNDX'
LR 14,&BIT
SRDL 14,3
SRL 15,29
LAY 1,&ARRAY
LA 1,0(14,1)
AIF ('&ACTION' EQ 'ON').ACON
AIF ('&ACTION' EQ 'OFF').ACOFF
AGO .ERROR1
.ACON ANOP
&TBTIX.O DS 0H
LLILF 14,X'00000080'
LTR 15,15
JZ &TBTIX.R
&TBTIX.L DS 0H
SRL 14,1
BCT 15,&TBTIX.L
&TBTIX.R DS 0H
EX 14,&TBTIX.X
B &TBTIX.F
&TBTIX.X OI 0(1),0
AGO .MEXIT
.ACOFF ANOP
&TBTIX.N DS 0H
LLILF 14,X'FFFFFF7F'
LTR 15,15
JZ &TBTIX.S
&TBTIX.M DS 0H
SRL 14,1
BCT 15,&TBTIX.M
&TBTIX.S DS 0H
EX 14,&TBTIX.Y
B &TBTIX.F
&TBTIX.Y NI 0(1),0
AGO .MEXIT
.ERROR1 ANOP
MNOTE 8,'*** ACTION PARAMETER INVALID'
AGO .MEXIT
.MEXIT ANOP
&TBTIX.F EQU *
MEND
Philippe Leite
z/OS System Programmer