*DECK OCT 
          IDENT  OCT
          TITLE  OCT - CONVERT BINARY TO DISPLAY CODE OCTAL 
          COMMENT  CONVERT BINARY TO DISPLAY CODE OCTAL 
* 
**        OCT - CONVERT BINARY TO DISPLAY CODE OCTAL
* 
*         INPUTS
*                SYMPL CALLING SEQ  (FUNC)  X=OCT (A,B,C) 
*                X MUST BE C(40)
*                A IS ADDRESS OF FIELD TO CONVERT 
*                B IS OFFSET IN 3 BIT BYTES STARTING FROM 0 
*                C IS NUMBER OF 3 BIT BYTES TO CONVERT (MAX 40) 
* 
*         RETURNS DISPLAY CODE LEFT JUST SPACE FILLED.
* 
  
          ENTRY  OCT
 OCT      DATA   0
          SB1    1
          SA2    A1+B1       GET ADDRESS OF OFFSET
          SA3    A2+B1       GET ADDRESS OF LENGTH
          MX0    54          MASK FOR CHARS IN LATER LOOP 
          SA2    X2          GET OFFSET 
          SA3    X3          GET LENGTH 
          SA4    =O6314632   1/10 * 2**24 
          IX6    X4*X2
          AX6    25          OFFSET/20
          IX1    X1+X6       POINT TO STARTING WORD 
          SA1    X1          GET WORD WITH DATA 
          SX4    10 
          IX4    X6*X4       FULL WORD OFFSET 
          IX4    X2-X4       OFFSET INTO FIRST WORD 
          SX2    3
          IX4    X4*X2       GIVES NBR OF BYTES TO SHIFT
          SB2    X4          SAVE SHIFT COUNT 
          SB3    60          MAX SHIFT
          LX1    B2,X1       POSITION FIRST WORD
          SB4    X3          LENGTH 
          SA4    =10H            SPACES 
          MX7    57          BYTE MASK
          BX6    X4 
          SB5    10 
          SB6    4
          SB7    B0 
 LOOP     BSS    0
          LX1    3           GET AN OCTAL DIGIT 
          LX6    6           SHIFT PREVIOUS CONVERTED DIGIT 
          BX5    -X7*X1      MASK OFF OCTAL DIGIT 
          SX5    X5+33B      CONVERT TO DISPLAY CODE
          BX6    X0*X6       PLACE FOR NEW CHAR 
          BX6    X5+X6       PUT IN 
          SB5    B5-B1       DECREMENT X6 COUNT 
          NZ     B5,LOOP1    JP IF X6 NOT FULL
          SA6    B7+SVRTN    SAVE THE WORD
          SB7    B7+B1
          BX6    X4 
          SB5    10 
 LOOP1    BSS    0
          SB4    B4-B1       DECREMENT CHAR COUNT 
          ZR     B4,DONE     JP IF DONE 
          SB2    B2+3        BUMP SHIFT COUNT 
          NE     B2,B3,LOOP  JP IF STILL IN WORD
          SA1    A1+B1       GET NEXT WORD
          SB2    B0 
          EQ     LOOP 
 DONE     BSS    0
          ZR     B5,DONE2    JP IF WORD JUST STORED 
          LX6    6           POSITION NEW STUFF AT TOP
          SB5    B5-B1
          EQ     DONE 
 DONE2    BSS    0
 DONE3    BSS    0
          EQ     B7,B6,DONE4 JP IF ALL RETURN FILLED IN 
          SA6    B7+SVRTN   STORE NEXT WORD 
          BX6    X4 
          SB7    B7+B1
          EQ     DONE3
 DONE4    BSS    0
          SX6    SVRTN       SET RETURN PARAMETER 
          EQ     OCT
 SVRTN    BSS    4
          END 
