*DECK C$XLATE 
          IDENT  C$XLATE
 CBXLATE  TITLE  CBXLATE - UNIVAC TO CYBER CHARACTER TRANSLATOR 
  
          MACHINE   ANY,I 
          COMMENT   UNIVAC TO CYBER CHAR TANSLATOR
  
          SST 
          B1=1
  
 CBXLATE  SPACE  4
**        CBXLATE - UNIVAC TOCYBER CHARACTER TRANSLATOR FOR CODE-SET
*                TRANSLATES RECORDS TO AND FROM FIELDATA. 
* 
*                THIS ROUTINE JUST SCANS EACH RECORD DOING A
*                            CHAR BY CHAR TRANSLATION 
* 
*                CALLED JUST AFTER A GET
*                            AND
*                       JUST BEFORE A PUT 
* 
*                CHANGES ALL REGISTERS EXCEPT A0 AND B1 
*                            ***EXPECTS B1 = 1 **** 
* 
* 
*                THERE ARE TWO ENTRY POINTS:  
*                            C.UNICY - UNIVAC TO CYBER (READ) 
*                            C.CYUNI - CYBER TO UNIVAC (WRITE)
* 
* 
          ENTRY  C.UNICY
          ENTRY  C.CYUNI
* 
          USE    /C.XLATE/
 XPTR     BSS    1           TRANSLATE TABLE POINTER
          USE    *
  
 C.UNICY  SPACE  4
**        C.UNICY - XLATE UNIVAC FIELDATA CODE TO CYBER DISPLAY CODE
* 
  
 C.UNICY  DATA   0
  
          SA5    XPTR 
          SB2    X5          POINTER TO XLATE TABLE (WE HOPE) 
          LX5    18 
          SX5    X5-3RUNI    CHECK FORMAT 
          NZ     X5,XLATERR  NOT OUR POINTER...ABORT
  
          SB3    60 
          FETCH  A0,RL,X3    REC LNTH - CHARS 
          SB7    X3 
          SB6    10 
          FETCH  A0,WSA,X2   WSA ADDR 
  
+         GE     B7,B6,*+1   REC LONGER THAN 1 WORD 
-         RJ     BLDSFT      GO BUILD SHIFT COUNT 
  
          SB7    B7-B6
          MX6    0
          SA5    X2          FIRST WORD OF RECORD 
          MX0    54 
  
 UCLOOP   LX5    6
          BX3    -X0*X5      STRIP CHAR 
          SA3    X3+B2
          SB6    B6-B1
          BX3    -X0*X3      XLATED CHAR
          BX6    X6+X3       .OR. IT IN 
          ZR     B6,UCNXT 
          LX6    6
          EQ     UCLOOP 
  
 UCNXT    ZR     B7,UCDONE
          SB6    10 
+         GE     B7,B6,*+1
-         RJ     BLDSFT 
          SA6    A5          STORE XLATED WORD
          SB7    B7-B6
          MX6    0
          SA5    A5+B1       GET NEXT WORD
          EQ     UCLOOP      GO XLATE 
  
 UCDONE   LX6    X6,B3       L. JUST WORD 
          SA6    A5 
          EQ     C.UNICY
 BLDSFT   SPACE  4
*         BLDSDT - BUILD SHIFT COUNT FOR SHORT WORDS
*                TO ALLOW FINAL RESULT L. JUST
* 
 BLDSFT   DATA   0
          SX3    B6-B7       NR NON-DATA CHARS
          SB6    B7 
 A        IFEQ   OP.MODEL,OP.6600 
          SX4    6
          IX3    X3*X4
 A        ELSE
          LX4    X3,B1       X3*2 
          LX3    2           X3*4 
          IX3    X3+X4       X3*6 
 A        ENDIF 
          SB3    X3          SHIFT COUNT
          EQ     BLDSFT 
 C.CYUNI  SPACE  4
**        C.CYUNI - XLATE CYBER DISPLAY CODE TO UNIVAC FIELDATA 
*                WORKS JUST LIKE C.UNICY
  
 C.CYUNI  DATA   0
  
          SA5    XPTR 
          SB2    X5          POINTER TO XLATE TABLE (WE HOPE) 
          LX5    18 
          SX5    X5-3RUNI    TEST FLAG
          NZ     X5,XLATERR  NOT OUR POINTER...ABORT
  
          SB3    60 
          FETCH  A0,RL,X3 
          SB7    X3 
          SB6    10 
          FETCH  A0,WSA,X2
  
+         GE     B7,B6,*+1
-         RJ     BLDSFT      BUILD SHORT WORD SHIFT COUNT 
          SB7    B7-B6
          MX6    0
          SA5    X2          FIRST WORD OF RECORD 
          MX0    54 
  
 CULOOP   LX5    6
          BX3    -X0*X5      STRIP CHAR 
          SA3    X3+B2
          SB6    B6-B1
          LX3    30          PICK UP OTHER PART OF TABLE
          BX3    -X0*X3 
          BX6    X6+X3
          LX6    6
          NZ     B6,CULOOP
          LX6    54          AROUND AGAIN 
  
          ZR     B7,CUDONE
          SB6    10 
+         GE     B7,B6,*+1
-         RJ     BLDSFT 
          SA6    A5 
          SB7    B7-B6
          MX6    0
          SA5    A5+B1       GET NEXT WORD
          EQ     CULOOP 
  
 CUDONE   LX6    X6,B3       L. JUST WORD 
          SA6    A5          STORE LAST WORD
          EQ     C.CYUNI
  
  
 XLATERR  SX1    #XLATMSG 
          SX3    -1 
          SX6    B1 
          RJ     =XC.MSG     GO DIE 
  
          END 
