9 #ANDER, TAD #XR /Simple masking
15 /FPP code here; using the rest of the SECT8 page.
17 SECNAM, TEXT +BITSET+ /For traceback
18 #RET, SETX #XR /Traceback
21 #BASE, ORG .+3 /Base 0
22 N, ORG .+3 /Base 1 - value
24 #BSET, TEXT +BITSET+ /Base 2 - section name
25 #ISH, TEXT +ISHFT + /Base 3
27 / Now at address 23, past autoindex registers.
28 #XR, FNOP /Base 5: XR 0
29 ADDR #RETRN / XR 1; XR2 return to FRTS address.
31 ORG #XR+10 /Past index regs, same as -
33 ORG #BASE+30 /30 (base page)
147 /BITSET(L,N) = (COND(L).AND.ISHFT(1,N)) .NE.0
149 BITSET, FLDA #BSET /Section name
150 JSA GETARG /Common setup
153 FLDA% L /Get array index
155 FLDA COND-3,1 /COND(L)
157 LDX 1,0 /Put 1 into shift value
159 JEQ #1 /No shift if zero
162 XTA 0 /Get the "1" back
163 ALN 0 /Align to right
167 ATX 0 /Put result in place
168 #1, XTA 0 /Get result
170 ATX 0 /One mask value
176 JEQ #GOBAK /Return if zero
179 ITEST, ORG .+3 /Test value
186 ISHFT, FLDA #ISH /Section name
187 JSA GETARG /Common setup
190 FLDA% N /Get shift count
191 JEQ #SKIP /No need to shift
192 FNEG /Negative shift count goes left
194 FLDA% L /Get value to shift
195 ALN 0 /Align to right
201 #SKIP, FLDA% L /Get value back
204 GETARG, 0;0 /Common setup routine
205 FSTA SECNAM /AC has section name
207 0210 /Get caller's return
210 SETX #XR /Set up index registers
211 SETB #BASE /Set up base page
212 FSTA #BASE /Set up arg list
214 FLDA% #BASE,1+ /Get first arg
216 FLDA% #BASE,1+ /Second arg