FTN4,L
      PROGRAM FGETR(3,90),24999-16053 REV.2024 800514 
C 
C 
C                   THIS PROGRAM ALLOWS THE USER TO ACCESS FILES ON 
C                   JSAVE MAG TAPES. IT ALSO WILL GIVE A "DL" ON THE
C                   FILE FOR HIM. THE DIRECTORY LIST IS SLIGHTLY
C                   FASTER THAN THE FILE MANAGER BECAUSE IT DOES
C                   TRACK BUFFERS AT A TIME.
C 
C                   THE ONLY ROUTINE OTHER THAN THIS REQUIRED IS
C                   ASCII WHICH DOES A BINAR TO ASCII CONVERSION
C                   WITH LEADING ZEROS LEFT. THE ROUTINE IS IN
C                   ASSEMBLER THE CALLING SEQUNCE IS
C                   CALL ASCII(I,J,K) 
C 
C                   I IS THE BINARY NUMBER
C                   J IS THE ADDRESS OF THE RESULT (3 WORDS)
C                   K IS THE BASE WE WANT THE RESULT IN 
C 
C 
C     REVISIONS FOR 2024
C 
C         1) ABLE TO HANDLE 7925 DISC 
C         2) HANDLE TYPE 2 FILES CORRECTLY
C         3) GIVE CORRECT HEADINGS WHEN DOING MORE THAN ONE DL. 
C         4) POSITION TO MT FILE CORRECTLY FROM ANYWHERE. 
C         5) IMPROVE PROGRAM FLOW (HOPEFULLY FRIENDLINESS)
C 
      DIMENSION ID(144),NA(3),LT(40),LS(40),NS(40),NA2(3) 
      DIMENSION LU(5),IREG(2),MBUF(52),IPBUF(33)
      DIMENSION IBUF(8193),JBUF(8192),IANS(2),MES11(10) 
C                   ******     ****** 
      DIMENSION LIN(24),LIN1(5),KFILE(5)
      DIMENSION LIN2(35),LIN3(24),NSS(2)
C                       ****************
      INTEGER FIRST,LAST,FILE 
      EQUIVALENCE (IA,IREG),(IB,IREG(2)),(X,IREG) 
      EQUIVALENCE (IBUF,ITRAK),(JBUF,IBUF(2)) 
      EQUIVALENCE (IBUF(4),IBUF4) 
C 
C*********************
      DATA JLNTH/8192/
C*********************
      DATA KFILE/6412B,2H F,2HIL,2HE ,2H  / 
C*************************************************************
C 
C     REMOVED MESS1 TO,MES10 AND MES12 TO MES15 FROM DATA AREA
C 
C*************************************************************
      DATA MES11/2H F,2HIL,2HE ,2HCR,2HEA,2HTI,2HON,2H E,2HRR,2HOR/ 
      DATA LIN/24*2H  / 
      DATA LIN1/2H  ,2HCR,2H,3*2H  /
      DATA LIN2/2H  ,2H I,2HLA,2HB=,3*2H  ,2H N,2HXT,2HR=,
     *2*2H  ,2H N,2HXS,2HEC,2*2H  ,2H #,2HSE,2HC/,2HTR,2*2H  ,
     *2H L,2HAS,2HT ,2HTR,2H= ,2*2H  ,2H #,2HDR,2H T,2HR=,2H  / 
      DATA LIN3/2H  ,2HNA,2HME,2H  ,2H T,2HYP,2HE ,2H#B,2HLK, 
     *2HS/,2HLU,2H S,2HCO,2HDE,2H T,2HRA,2HCK,2H S,2HEC,2H  , 
     *2HOP,2HEN,2H T,2HO /
      CALL RMPAR(LU)
      IF(LU.EQ.0)LU=1 
      ILU=LU+400B 
C***********************************************************
      CALL EXEC(2,LU,2H  ,-2) 
      CALL EXEC(2,LU,30H 24999-16053 2024 SSK SYS 1000,-30) 
C***********************************************************
C 
C   GET MAG TAPE LU 
C 
C********************************************** 
10    CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,16H  MAG TAPE LU: _,-16)
C********************************************** 
      X=REIO(1,ILU,MBUF,10) 
      IF (MBUF.EQ.2H/E)GO TO 380
      CALL PARSE(MBUF,IB*2,IPBUF) 
      MTLU=IPBUF(2) 
C 
      CALL EXEC(13,MTLU,ISTAT)
      IF(IAND(ISTAT,37400B)*2.EQ.23000B)GO TO 20
      IF(IAND(ISTAT,37400B)*2.EQ.24000B)GO TO 20
C*****************************************************
      CALL EXEC(2,ILU,24H  THAT'S NOT A MAG TAPE!,-24)
C*****************************************************
      GO TO 10
C*********************************************
20    IREG=LURQ(100001B,MTLU,1) 
      IF(IREG.EQ.0)GO TO 30 
      CALL EXEC(2,ILU,16HLU LOCK REJECTED,-16)
C*********************************************
      GO TO 380 
C 
30    REWIND MTLU 
40    FILE=1
C 
C 
C   GET MAG TAPE FILE NUMBER AND IDENT
C 
C***********************************************
50    IFLG = 0
      CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,18H  MAG TAPE FILE: _,-18)
C***********************************************
      X=REIO(1,ILU,MBUF,10) 
      IF(MBUF .EQ. 2H/E)GO TO 380 
      CALL PARSE(MBUF,IB*2,IPBUF) 
      NFILE=IPBUF(2)
      IF(NFILE.LT.0)GO TO 380 
      IF(NFILE.EQ.0)NFILE = FILE
C 
C 
C 
C   POSITION THE TAPE 
C 
C********************************** 
      IF(NFILE .GT. 1)GO TO 60
      REWIND MTLU 
      FILE = 1
      GO TO 120 
60    IF(FILE.EQ.NFILE)GO TO 110
      CALL EXEC(3,MTLU+1400B) 
      IF(FILE.EQ.1)GO TO 70 
      CALL EXEC(3,MTLU+1300B) 
70    CALL EXEC(1,MTLU,MBUF,50) 
      CALL HEADL(MBUF,LEN)
      KFILE(5)=KCVT(FILE) 
      CALL EXEC(2,ILU,KFILE,5)
      CALL EXEC(2,ILU,MBUF,LEN) 
C 
C                   FORWORD-BACK WORD  UP PROCESSOR 
C 
C 
      IF(NFILE.GT.FILE)GO TO 80 
      GO TO 90
C 
C 
C                   FORWORD 
C 
C 
80    CALL EXEC(3,MTLU+1300B) 
      FILE=FILE+1 
      IF(FILE.EQ.NFILE)GO TO 120
      KFILE(5)=KCVT(FILE) 
      CALL EXEC(2,ILU,KFILE,5)
      CALL EXEC(1,MTLU,MBUF,50) 
      CALL HEADL(MBUF,LEN)
      CALL EXEC(2,ILU,MBUF,LEN) 
      GO TO 80
C 
C 
C                   BACK WORD 
C 
C 
90    FILE=FILE-1 
      CALL EXEC(3,MTLU+1400B) 
      CALL EXEC(3,MTLU+1400B) 
      IF(FILE.EQ.1)GO TO 120
      CALL EXEC(3,MTLU+1300B) 
100   IF(FILE .EQ. NFILE)GO TO 120
      CALL EXEC(1,MTLU,MBUF,50) 
      KFILE(5)=KCVT(FILE) 
      CALL EXEC(2,ILU,KFILE,5)
      CALL HEADL(MBUF,LEN)
      CALL EXEC(2,ILU,MBUF,LEN) 
      GO TO 90
C 
C 
C   GET HEADER AND CHECK IF THAT'S WHAT HE WANTS
C 
110   CALL EXEC(3,MTLU+1400B) 
      IF(FILE.EQ.1)GOTO 120 
      CALL EXEC(3,MTLU+1300B) 
120   CALL EXEC(1,MTLU,MBUF,50) 
      KFILE(5)=KCVT(FILE) 
      CALL EXEC(2,ILU,KFILE,5)
      CALL HEADL(MBUF,LEN)
C 
C     SET UP A ' ? _' IN THE BUFFER.
C 
      LEN=LEN+1 
      MBUF(LEN)=20077B
      LEN = LEN + 1 
      MBUF(LEN)=20137B
C***********************************************
130   CALL EXEC(2,ILU,MBUF,LEN) 
      CALL REIO(1,ILU,IANS,2) 
      IF(IANS.EQ.2HYE)GO TO 150 
      IF(IANS.EQ.2HNO)GO TO 50
C**************************** 
      CALL EXEC(3,MTLU+1400B) 
      IF(FILE.EQ.1)GO TO 140
      CALL EXEC(3,MTLU+1300B) 
140   GO TO 120 
C 
C         ASK IF THEY WANT A DIRECTORY LISTING OF THAT FILE 
C 
C*********************************************************
150   CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,28H  DO YOU WISH A DIRECTORY ?_,-28)
C*********************************************************
      CALL REIO(1,ILU,IANS,2) 
      IF (IANS.EQ.2H/E)GO TO 380
      IF(IANS.NE.2HYE)GO TO 160 
      IFLG=1
C 
C                   ASK WHERE HE WOULD LIKE IT
C 
C**************************************** 
      CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,11H  WHAT LU _,-11) 
C**************************************** 
      X=REIO(1,ILU,IANS,2)
      IF (IANS.EQ.2H/E)GO TO 380
      CALL PARSE(IANS,IB*2,IPBUF) 
      LIST=IPBUF(2) 
      GO TO 200 
C 
C              DOESNT WANT A DIRECTORY ASK FOR A FILE NAME
C 
C*****************************************************
160   CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,24H  FILE NAMR,<NEW NAMR>:_,-24)
C*****************************************************
      MBUF=2H 
      MBUF(2)=2H
      MBUF(3)=2H
      X=REIO(1,ILU,MBUF,30) 
      IF (MBUF.EQ.2H/E)GO TO 380
      IF (IB .EQ. 0)GO TO 350 
      ICHRS = IB * 2
      IP = 1
      IF (NAMR(IBUF,MBUF,ICHRS,IP)) 160 ,170
170   IT = IAND (IBUF4,3) 
      IF(IT .LE. 1)GO TO 160
      NA (1) = IBUF (1) 
      NA (2) = IBUF (2) 
      NA (3) = IBUF (3) 
      ISC2 = IBUF(5)
      ICR2 = IBUF(6)
      IF (NAMR(IBUF,MBUF,ICHRS,IP)) 190 ,180
180   IT = IAND (IBUF4,3) 
      ISCHK = ISOL8(IBUF4,2,3)
      ICCHK = ISOL8(IBUF4,4,5)
      IF(IT .LE. 1)GO TO 190
      NA2 (1) = IBUF (1)
      NA2 (2) = IBUF (2)
      NA2 (3) = IBUF (3)
      IF(ISCHK .NE. 0) ISC2 = IBUF (5)
      IF(ICCHK .NE. 0) ICR2 = IBUF (6)
      GO TO 200 
190   NA2 (1) = NA (1)
      NA2 (2) = NA (2)
      NA2 (3) = NA (3)
C**************************** 
C 
C                   WERE THERE AT THE FILE READ IN THE DIRECTORY
C                   TRACKS AND EITHER FIND OUR FILE OR FORMAT THE 
C                   INFO AND OUTPUT IT TO THE LIST DEVICE 
C 
200   ISUM=0
      NSS=0 
      NSS(2) = 0
      MR=0
210   M=1 
      ISEC=0
      JSEC=0
C 
C     ********************************************************
C     *             READ A RECORD FROM MAG TAPE              *
C     ********************************************************
C 
C                   READ A TRACK
C 
      X = EXEC(1,MTLU,IBUF,JLNTH+1) 
      IF(IAND(IREG,200B).NE.0)GO TO 350 
C 
C                   IF FIRST DIRECTORY TRACK FIRST 16 WORDS 
C                   ARE PACK LBL INFO 
C 
      IF(MR.NE.0)GO TO 220
      M=17
      ISPT=JBUF(7)
      IBPT=ISPT/2 
      JLNTH=64*ISPT 
      IF(IFLG.EQ.0)GO TO 220
C 
C                   FORMAT AND OUTPUT THE DL HEADER INFO
C 
      CALL ASCII(JBUF(4),LIN1(3),10)
      LIN1(3)=IAND(LIN1(3),177B)+36400B 
      CALL EXEC(3,1100B+LIST,-1)
      CALL EXEC(2,LIST,LIN1,5)
      LIN2(5)=IAND(JBUF(1),77777B)
      LIN2(6)=JBUF(2) 
      LIN2(7)=JBUF(3) 
      CALL ASCII(JBUF(10),MBUF,10)
      LIN2(11)=MBUF(2)
      LIN2(12)=MBUF(3)
      CALL ASCII(JBUF(6),MBUF,10) 
      LIN2(16)=IAND(MBUF(2),177B)+36400B
      LIN2(17)=MBUF(3)
      CALL ASCII(JBUF(7),MBUF,10) 
      LIN2(22)=IAND(MBUF(2),177B)+36400B
      LIN2(23)=MBUF(3)
      IA=JBUF(8)-JBUF(9)-1
      CALL ASCII(IA,MBUF,10)
      LIN2(29)=MBUF(2)
      LIN2(30)=MBUF(3)
      IA=-JBUF(9) 
      CALL ASCII(IA,MBUF,10)
      LIN2(35)=MBUF(3)
      CALL EXEC(2,LIST,LIN2,35) 
      CALL EXEC(3,1100B+LIST,1) 
      CALL EXEC(2,LIST,LIN3,24) 
      CALL EXEC(3,1100B+LIST,1) 
C 
C                   SCAN THE ENTIRE TRACK LOOP
C 
220   DO 270 N=M,128,16 
C 
C                   COMPUTE THE FILE INFO OFFSET
C 
      MR=N+ISEC*64
C 
C                   IF ELEMENT = -1 FILE WAS PURGED IGNORE
C 
      IF(JBUF(MR).EQ.-1)GO TO 270 
C 
C                   IF = 0 END OF DIRECTORY GET OUT 
C 
      IF(JBUF(MR).EQ.0)GO TO 280
      IF(IFLG.EQ.0)GO TO 260
C 
C                   DO DL FORMATTING STUFF
C 
      DO 230 IA=1,24
230   LIN(IA)=2H
      LIN(2)=JBUF(MR) 
      LIN(3)=JBUF(MR+1) 
      LIN(4)=JBUF(MR+2) 
      CALL ASCII(JBUF(MR+3),LIN(5),10)
      IF(IAND(LIN(5),77400B).EQ.30000B)LIN(5)=IAND(LIN(5),177B) 
     1+20000B 
      IF(JBUF(MR+3).EQ.0)GO TO 240
      IA=JBUF(MR+6)/2 
      CALL ASCII(IA,LIN(8),10)
      IF(IAND(LIN(8),77400B).EQ.30000B)LIN(8)=IAND(LIN(8),177B) 
     1+20000B 
      CALL ASCII(JBUF(MR+4),LIN(15),10) 
      LIN(15)=20040B
      IA=IAND(JBUF(MR+5),377B)
      CALL ASCII(IA,MBUF,10)
      LIN(18)=MBUF(2) 
      IF(IAND(LIN(18),77400B).EQ.30000B)LIN(18)=IAND(LIN(18)
     1,177B)+20000B 
      LIN(19)=MBUF(3) 
      IA=0
      IF(JBUF(MR+5).LT.0)IA=200B
      IA=IA+IAND(77400B,JBUF(MR+5))/256 
      IF(IA.EQ.0)GO TO 250
      CALL ASCII(IA,MBUF,10)
      LIN(21)=IAND(MBUF(2),177B)+25400B 
      LIN(22)=MBUF(3) 
      GO TO 250 
240   CALL ASCII(JBUF(MR+4),MBUF,10)
      LIN(10)=MBUF(3) 
250   CALL ASCII(JBUF(MR+8),LIN(12),10) 
      IF(IAND(LIN(12),77400B).EQ.30000B)LIN(12)=IAND(LIN(12)
     1,177B)+20000B 
      CALL EXEC(2,LIST,LIN,24)
      GO TO 270 
C 
C                   NOT DOING DL SO SEE IF ENTRY IS FOR OUR FILE
C 
260   IF(JBUF(MR).NE.NA)GO TO 270 
      IF(JBUF(MR+1).NE.NA(2))GO TO 270
      IF(JBUF(MR+2).NE.NA(3))GO TO 270
C 
C                   YES SAVE AND INCRIMENT PERTINANT INFORMATION
C 
      ISUM=ISUM+1 
      IF(JBUF(MR+5).LT.256)NTP=JBUF(MR+3) 
      LT(ISUM)=JBUF(MR+4) 
      LS(ISUM)=IAND(377B,JBUF(MR+5))
      NS(ISUM)=JBUF(MR+6)/2 
      NSS=NSS+NS(ISUM)
C***************************************
      IF(NTP .EQ. 2) NSS(2) = JBUF(MR+7)
C***************************************
270   CONTINUE
C 
C                   DONE TRACK MUST BE MORE SO SET UP FOR THEM
C 
      M=1 
      ISEC=MOD(ISEC+14,ISPT)
C                      **** 
      JSEC=JSEC+1 
      IF(JSEC.LT.IBPT)GO TO 220 
C                **** 
      GO TO 210 
C 
C                   DONE SCAN SET UP TO GET FILE OFF TAPE 
C 
280   IF(ISUM.EQ.0)GO TO 330
      IS=1
C 
C                   CREATE THE FILE BECAUSE WE FOUND SOMETHING
C 
      CALL CREAT(ID,IRE,NA2,NSS,NTP,ISC2,ICR2)
      IF(IRE.LT.0)GO TO 340 
C 
C                   CLOSE THE FILE SO WE CAN OPEN IT BETTER 
C 
      CALL CLOSE(ID)
C 
C                   OPEN THE FILE TYPE ONE SO WE MAY JUST 
C                   TRANSFER WHOLE RECORDS
C 
      CALL OPEN(ID,IRE,NA2,4,ISC2,ICR2) 
C 
C                   READ IN A MAG TAPE RECORD 
290   X = EXEC(1,MTLU,IBUF,JLNTH+1) 
      IF(IAND(IREG,200B).NE.0)GO TO 320 
C 
C                   SEE IF WE WANT THIS TRACK 
C 
300   IF(IBUF.NE.LT(IS))GO TO 290 
C 
C                   YES FIGURE OUT OUR OFFSET INTO THE FILE 
C 
      IA=64*LS(IS)+1
C 
C                   TRANSFER THE CORRECT NUMBER OF SECTORS
      DO 310 N=1,NS(IS) 
      CALL WRITF(ID,IRE,JBUF(IA),128) 
      IA=IA+128 
C 
C                   MAKE SURE WE DONT CROSS TRACK BOUNDS
C 
      IF(IA.LT.JLNTH)GO TO 310
      X = EXEC(1,MTLU,IBUF,JLNTH+1) 
      IF(IAND(IREG,200B).NE.0)GO TO 320 
      IA=1
310   CONTINUE
      IS=IS+1 
      IF(IS.GT.ISUM)GO TO 320 
      GO TO 300 
320   CALL CLOSE(ID)
      GO TO 350 
C 
C                   IF NOT DOING DIRECTORY AND NO FILE SAY SO 
C 
330   IF(IFLG.EQ.0)CALL EXEC(2,ILU,8H NO FILE,-8) 
      GO TO 350 
C 
C                   FILE ERROR SAY SO 
C 
340   CALL ASCII(-IRE,MES11(11),10) 
      MES11(12)=26440B
      CALL EXEC(2,ILU,MES11,13) 
C 
C                   ASK IF ANY MORE TO DO 
C 
C**************************** 
350   CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,24H  ANY MORE THIS FILE ? _,-24)
C*******************************************
      CALL REIO(1,ILU,MBUF,10)
      IF(MBUF.NE.2HYE)GO TO 370 
      IF(FILE .NE. 1)GO TO 355  
      REWIND MTLU 
      GO TO 360 
355   CALL EXEC(3,MTLU+1400B) 
      CALL EXEC(3,MTLU+1300B) 
360   CALL EXEC(3,MTLU+300B)
      IFLG = 0
      GO TO 160 
370   CALL EXEC(2,ILU,2H  ,-2)
      CALL EXEC(2,ILU,24H  ANY MORE THIS TAPE ? _,-24)
      CALL REIO(1,ILU,MBUF,10)
      IF(MBUF.EQ.2HYE)GO TO 50
C 
C                   REWIND MAG TAPE 
C 
C****************************** 
380   REWIND MTLU 
C 
C                   UNLOCK LU'S 
C 
      CALL LURQ(100000B,MTLU,1) 
C****************************** 
C                   NO BYE BYE
C 
      END 
      SUBROUTINE HEADL(IBUF,LEN),24999-16053 REV.2024 800509
      DIMENSION IBUF(50)
C 
C     DO BACK SCAN ON IBUF TO FIND TRUE LENGTH OF RECORD
C 
10    DO 20  I=50,1,-1
      IF(IBUF(I) .EQ. 2H  )GO TO 20 
      IF(IBUF(I) .NE.6412B)GO TO 30 
      I = I - 2 
      GO TO 30
20    CONTINUE
      LEN = 1 
30    LEN = I + 1 
C 
      RETURN
      END 
      END$
ASMB,L,C
      NAM ASCII 
      ENT ASCII 
      EXT .ENTR 
A     EQU 0 
B     EQU 1 
NUM   NOP 
PUT   NOP 
E     NOP 
ASCII NOP 
      JSB .ENTR        GET CALLING PARMS
      DEF NUM 
      CLA 
      STA FLAG
      LDA DM3 
      STA CNT 
      LDA PUT          SAVE DESTINATION ADDRESS 
      ADA .2
      STA PUTT
      LDA NUM,I 
      STA NUMM
      LDA E,I 
      STA BASE
      CPA .8
      JMP LOP 
      LDA NUMM
      SSA,RSS 
      JMP LOP 
      CCB 
      CMA,INA 
      STA NUMM
      STB FLAG
LOP   LDA NUMM
      CLB 
      DIV BASE
      ADB B60 
      STB PUTT,I
      CLB 
      DIV BASE
      STA NUMM
      LDA B 
      ADA B60 
      ALF,ALF 
      IOR PUTT,I
      STA PUTT,I
      LDA PUTT
      ADA DM1 
      STA PUTT
      ISZ CNT 
      JMP LOP 
      LDA FLAG
      SZA,RSS 
      JMP ASCII,I 
      ISZ PUTT
      LDA B377
      AND PUTT,I
      IOR MIN 
      STA PUTT,I
      JMP ASCII,I 
CNT   NOP 
DM3   DEC -3
DM1   DEC -1
.2    DEC 2 
.8    DEC 8 
B60   OCT 60
B377  OCT 377 
MIN   OCT 26400 
BASE  NOP 
NUMM  NOP 
PUTT  NOP 
FLAG NOP
      END 
ASMB,R,B,L
      NAM ISOL8,7 ISOLATE,RIGHT JUSTIFY BITS. 18 JAN 77.
      ENT ISOL8 
      EXT .ENTR 
* 
* I=ISOL8(J,11,8) ISOLATES BITS 11,10,9,8 FROM J AND RETURNS THEM 
*                 IN THE LEAST SIGNIFICANT BITS OF I. HIGH BITS OF
*                 I ARE ZEROED OUT. 
* I=ISOL8(J,8,11) DOES THE SAME THING.
* 
* I=ISOL8(J,15,0) RETURNS I=J 
* I=ISOL8(J,16,1) RETURNS I = J ROTATED 1 BIT RIGHT 
* 
J     NOP 
I1    NOP 
I2    NOP 
ISOL8 NOP 
      JSB .ENTR 
      DEF J 
      LDA I1,I
      CMA,INA      (A)= -I1 
      ADA I2,I     (A)= I2-I1 
      SSA          (A)>0 ?  I2>I1 ? 
      JMP RVERS    NO. I1>I2. 
      LDB I1,I     YES. I2>I1. GET I1.
      JMP CONT
RVERS LDB I2,I     I2 IS THE LEAST OF I1,I2.
      CMA,INA      (A)>=0.
CONT  CMB,INB      LEAST OF I1,I2 COUNTS ROTATIONS. 
      STA MASK#    MASK NUMBER >= 0.
      LDA J,I      GET THE WORD TO BE OPERATED ON.
* 
RLOOP SZB,RSS      DONE?  ROTATION COUNTER ROSE TO ZERO ? 
      JMP ISOL     YES. 
      RAR          NO. MOVE BITS-OF-INTEREST ONE PLACE RIGHT. 
      INB          BUMP ROTATION COUNTER. 
      JMP RLOOP 
* 
ISOL  LDB .MASK 
      ADB MASK#    (B) POINTS TO DESIRED MASK.
      AND B,I      ZERO OUT UNWANTED BITS.
      JMP ISOL8,I  RETURN WITH (A)=RIGHT JUSTIFIED ISOLATED BITS. 
* 
MASK# NOP 
.MASK DEF *+1 
      OCT 000001
      OCT 000003
      OCT 000007
      OCT 000017
      OCT 000037
      OCT 000077
      OCT 000177
      OCT 000377
      OCT 000777
      OCT 001777
      OCT 003777
      OCT 007777
      OCT 017777
      OCT 037777
      OCT 077777
      OCT 177777
* 
A     EQU 0 
B     EQU 1 
S     EQU 1 
      END 
                                                          