*DECK TRANDIS                                                            TRANDIS
          IDENT  TRAN$IS                                                 TRANDIS
*#                                                                       TRANDIS
**        TRAN$IS -TRANSLATE CHARACTER KEYS       PAGE 1                 TRANDIS
**        CI MCDONALD                             DATE 76/11/16          TRANDIS
*0CD      TRAN$IS                                                        TRANDIS
*0CD      FUNCTION                                                       TRANDIS
*         TRANSLATES USER CHARACTER KEYS TO AN INTERNAL FORMAT ACCORDING TRANDIS
*         TO A COLLATING SEQUENCE OR CONVERTS THE INTERNAL FORMAT OF THE TRANDIS
*         KEY BACK TO THE USERS ORIGINAL FORMAT.                         TRANDIS
*0CD      ENTRY CONDITIONS                                               TRANDIS
*         FIT$AA MUST BE THE FIT ADDRESS AND FSTT$AA MUST BE THE FSTT    TRANDIS
*         ADDRESS FOR BOTH ENTRY POINTS.                                 TRANDIS
*0        ENTRY TRN1$IS:                                                 TRANDIS
*         TRN1$IS IS CALLED WITH FOUR PARAMETERS. THEY ARE, IN ORDER,    RPN0118
*         FOUR CELLS CONTAINING THE KEY ADDRESS, THE KEY POSITION,       RPN0118
*         THE KEY LENGTH, AND THE LOCATION OF THE TRANSLATION TABLE.     RPN0118
*0        ENTRY TRN2$IS:                                                 TRANDIS
*         GCOM FIELDS KEYFWA, KEYOFF AND MAJKEY MUST BE SET TO THE       RPN0118
*         KEY ADDRESS KEY POSITION AND LENGTH RESPECTIVELY.              RPN0118
*0        ?_FSDICOT MUST BE THE OFFSET WITHIN THE FSTT OF THE DISPLAY TO TRANDIS
*         COLLATING TRANSLATION TABLE.                                   TRANDIS
*0        TRKY$IS MUST BE THE ADDRESS OF THE KEY DESTINATION.            CIM0204
*0CD      EXIT CONDITIONS                                                TRANDIS
*         ALL REGISTERS ARE CLOBBERED.                                   TRANDIS
*0        ENTRY TRN1$IS:                                                 TRANDIS
*         TRANSLATION WAS FROM INTERNAL FORMAT TO USERS ORIGINAL FORMAT  TRANDIS
*         IF CALLED WITH LOC(FSCODITAB).                                 TRANDIS
*0        TRANSLATION WAS FROM USERS ORIGINAL FORMAT TO INTERNAL FORMAT  TRANDIS
*         IF CALLED WITH LOC(FSDICOTAB).                                 TRANDIS
*0        THE TRANSLATION WAS DONE IN PLACE AND THE ALIGNMENT OF THE     TRANDIS
*         TRANSLATED KEY IS THE SAME AS THE ALIGNMENT OF THE KEY BEFORE  TRANDIS
*         TRANSLATION.                                                   TRANDIS
*0        ENTRY TRN2$IS:                                                 TRANDIS
*         TRANSLATION WAS ALWAYS FROM USERS ORIGINAL FORMAT TO INTERNAL  TRANDIS
*         FORMAT.                                                        TRANDIS
*0        THE DESTINATION OF THE TRANSLATED KEY IS ALWAYS TRKY$IS AND IS TRANDIS
*         WORD ALIGNED.                                                  TRANDIS
*0CD      CALLED ROUTINES                                                TRANDIS
*         NONE.                                                          TRANDIS
*0CD      DESCRIPTION                                                    TRANDIS
*0        ENTRY TRN1$IS:                                                 TRANDIS
*         EXTRACT INPUT PARAMETERS INTO THEIR RESPECTIVE REGISTERS.      TRANDIS
*         CALL TRNSETUP TO SET UP REMAINING REGISTERS.                   TRANDIS
*         TRANSLATION LOOP.                                              TRANDIS
*         CLEAN-UP AND RETURN TO CALLING ROUTINE.                        TRANDIS
*0        ENTRY TRN2$IS:                                                 TRANDIS
*         SET UP REGISTERS WITH KEY DESTINATION ADDRESS AND TRANSLATION  TRANDIS
*         TABLE ADDRESS.                                                 TRANDIS
*         CALL TRNSETUP TO SET UP SOME OF THE REMAINING REGISTERS.       TRANDIS
*         EXTRACT VALUES FROM THE FIT TO SET UP THE REMAINING REGISTERS. TRANDIS
*         TRANSLATION LOOP.                                              TRANDIS
*         CLEAN-UP AND RETURN TO CALLING ROUTINE.                        TRANDIS
*#                                                                       TRANDIS
*                                                                        TRANDIS
* REGISTER MAP:                                                          TRANDIS
*                                                                        TRANDIS
* X0=MASK BIT 59 (TRN1$IS) A0=ADDR FIT                B0=0               TRANDIS
* X1=SOURCE KEY            A1=ADDR SOURCE KEY         B1=1               TRANDIS
* X2=MASK BITS 0-2         A2=60 (RESETS B2)          B2=BIT COUNTER     TRANDIS
* X3=MASK BITS 1-3         A3=                        B3=BCP*6           TRANDIS
* X4=MASK BITS 0-5         A4=                        B4=ADDR TRANS TBL  TRANDIS
* X5=TRANSLATE TABLE       A5=ADDR TRANS TABLE        B5=SHIFTS TRAN TBL TRANDIS
* X6=TRANSLATED KEY        A6=ADDR KEY DEST (TRN2$IS) B6=6 (BUMPS B2)    TRANDIS
* X7=WORK                  A7=                        B7=KEY LENGTH      TRANDIS
          ENTRY  TRN1$IS,TRN2$IS                                         TRANDIS
          LIST   -L                                                      TRANDIS
*CALL AAMCOMCMP                                                          TRANDIS
          LIST   *                                                       TRANDIS
 TRNSETUP DATA   0                                                       TRANDIS
          SA3    FIT$AA                                                  TRANDIS
          SA0    X3          A0 IS ADDRESS OF FIT                        TRANDIS
          MX6    0           CLEAR FOR TRANSLATED KEY                    TRANDIS
          SA2    60          RESETS B2                                   TRANDIS
          SB2    A2          BIT COUNTER FOR OUTPUT WORD, 60,54,...,6,0  TRANDIS
          MX2    60-3                                                    TRANDIS
          SB6    6           DECREMENTS B2                               TRANDIS
          BX2    -X2         MASK, BITS 0-2                              TRANDIS
          LX3    B1,X2       MASK, BITS 1-3                              TRANDIS
          MX4    60-6                                                    TRANDIS
          BX4    -X4         MASK, BITS 0-5                              TRANDIS
          EQ     TRNSETUP                                                TRANDIS
 TRN1$IS  DATA   0                                                       TRANDIS
          SB1    1                                                       TRANDIS
          SA2    A1          A1 POINTS TO ADDR OF FIRST CALLING PARAM    TRANDIS
          SA1    X2          X2 IS ADDR OF FIRST CALLING PARAM           TRANDIS
          SA1    X1          A1 IS ADDR OF SOURCE KEY, X1 IS SOURCE KEY  TRANDIS
          SA2    A2+B1                                                   TRANDIS
          SA3    X2          X3 IS BCP OF SOURCE KEY                     TRANDIS
          IX6    X3+X3       BCP*2                                       TRANDIS
          LX7    B1,X6       BCP*4                                       TRANDIS
          IX5    X6+X7       BCP*6                                       TRANDIS
          SB3    X5                                                      TRANDIS
          SA2    A2+B1                                                   TRANDIS
          SA3    X2                                                      TRANDIS
          SB7    X3          B7 IS KEY LENGTH                            TRANDIS
          ZR     B7,TRN1$IS  ZERO CHARACTERS TO TRANSLATE 
          SA2    A2+B1                                                   TRANDIS
          SA3    X2                                                      TRANDIS
          SB4    X3          B4 IS ADDR OF TRANSLATION TABLE             TRANDIS
          RJ     TRNSETUP                                                TRANDIS
          MX0    1           MASK, BIT 59                                TRANDIS
          AX7    B3,X0                                                   TRANDIS
          BX7    X7-X0                                                   TRANDIS
          LX7    1           MASK FOR CHARS TO LEFT OF BCP OF KEY        TRANDIS
          BX6    X1*X7                                                   TRANDIS
          LX6    B3,X6       RIGHT JUSTIFY SAVED CHARS                   TRANDIS
          LX1    B3,X1       LEFT JUSTIFY FIRST CHAR OF KEY              TRANDIS
          LX1    1           BIT 0 IS HIGH BIT OF FIRST CHAR OF KEY      TRANDIS
 TRN1CHAR LX1    2           BITS 0-2= UPPER OCTAL DIGIT OF NEXT CHAR TO TRANDIS
          BX5    X1*X2                                                   TRANDIS
          SA5    X5+B4       LOAD TRNSLATION TABLE WORD FROM TABLE + UPP TRANDIS
          LX1    4           BITS 1-3 = LOWER OCTAL DIGIT OF CHARACTER   TRANDIS
          BX7    X1*X3                                                   TRANDIS
          SB5    X7+B6       B5= 2*LOWER DIGIT+6                         TRANDIS
          SB7    B7-B1       BUMP TOTAL CHARACTER COUNTER                TRANDIS
          LX6    6           ALIGN TRANSLATED KEY WORD FOR NEXT CHAR     TRANDIS
          IX7    X7+X7       4*LOWER DIGIT                               TRANDIS
          SB2    B2-B6       BUMP BIT COUNTER                            TRANDIS
          SB5    X7+B5       6*LOWER DIGIT+6. THIS IS THE SHIFT CONSTANT TRANDIS
          LX5    B5,X5       SHIFT TRANSLATED CHARACTER TO BITS 0-5      TRANDIS
          BX7    X4*X5       ISOLATE CHARACTER                           TRANDIS
          EQ     B7,LCTRANS1 JUMP IF LAST CHAR IS TRANSLATED             TRANDIS
          BX6    X6+X7       ADD TRANSLATED CHARACTER TO OUTPUT WORD     TRANDIS
          NE     B2,B3,TRN1CHAR JUMP IF WORD NOT COMPLETELY TRANSLATED   TRANDIS
          SA6    A1          STORE TRANSLATED WORD                       TRANDIS
          MX6    0           CLEAR FOR NEXT WORD OF TRANSLATED KEY       TRANDIS
          SA1    A1+B1       LOAD NEXT WORD TO BE TRANSLATED             TRANDIS
          SB2    A2          RESET BIT COUNTER                           TRANDIS
          SB3    B0          B3 IS NO LONGER BCP*6                       TRANDIS
          LX1    1                                                       TRANDIS
          EQ     TRN1CHAR                                                TRANDIS
 LCTRANS1 BX6    X6+X7       ADD LAST CHARACTER TO OUTPUT WORD           TRANDIS
          SB2    B2-B3                                                   CIM0204
          LX6    B2,X6       LEFT JUSTIFY TRANSLATED KEY IN OUTPUT WORD  TRANDIS
          AX7    B2,X0                                                   TRANDIS
          IX7    X7-X0                                                   TRANDIS
          LX7    1                                                       TRANDIS
          LX7    B2,X7       MASK FOR CHARS RIGHT OF KEY IN LAST WORD    TRANDIS
          SA5    A1          LAST WORD OF KEY                            TRANDIS
          BX7    X5*X7       MASK OFF CHARS SO THEY CAN BE RESTORED      TRANDIS
          BX6    X6+X7       ADD SAVED CHARS TO TRANSLATED KEY WORD      TRANDIS
          SA6    A1          STORE TRANSLATED KEY                        TRANDIS
          EQ     TRN1$IS                                                 TRANDIS
 TRN2$IS  DATA   0                                                       TRANDIS
          SA1    TRKY$IS-1                                               TRANDIS
          BX6    X1                                                      TRANDIS
          SA6    A1          A6 IS ADDR-1 OF DESTINATION FOR TRANS KEY   TRANDIS
          SB1    1                                                       TRANDIS
          SA3    FSTT$AA                                                 TRANDIS
          SB4    X3+?_FSDICOT B4 IS ADDRESS OF TRANSLATION TABLE         TRANDIS
          RJ     TRNSETUP                                                TRANDIS
          RF.AA  GCOM$AA,KEYOFF,5                                        RPN0118
          IX6    X5+X5       BCP*2                                       TRANDIS
          LX7    B1,X6       BCP*4                                       TRANDIS
          IX5    X6+X7       BCP*6                                       TRANDIS
          SB3    X5                                                      TRANDIS
          RF.AA  GCOM$AA,MAJKEY,5                                        RPN0118
          SB7    X5                                                      RPN0118
          ZR     B7,TRN2$IS  ZERO CHARACTERS TO TRANSLATE 
          RF.AA  GCOM$AA,KEYFWA,5                                        RPN0118
          SA1    X5                                                      RPN0118
          LX1    B3,X1       LEFT JUSTIFY FIRST CHAR OF KEY              TRANDIS
          MX6    0                                                       TRANDIS
          LX1    1           BIT 0 IS HIGH BIT OF FIRST CHAR OF KEY      TRANDIS
 TRN2CHAR LX1    2           BITS 0-2= UPPER OCTAL DIGIT OF NEXT CHAR TO TRANDIS
          BX5    X1*X2                                          BE TRANS TRANDIS
          SA5    X5+B4       LOAD TRANSLATION TABLE WORD FROM TABLE +    TRANDIS
          LX1    4           BITS 1-3= LOWER OCTAL DIGIT    UPPER/DIGIT  TRANDIS
          BX7    X1*X3                                                   TRANDIS
          SB5    X7+B6       B5= 2*LOWER DIGIT+6                         TRANDIS
          SB7    B7-B1       BUMP TOTAL CHARACTER COUNTER                TRANDIS
          LX6    6           ALIGN TRANSLATED KEY WORD FOR NEXT CHAR     TRANDIS
          IX7    X7+X7       4*LOWER DIGIT                               TRANDIS
          SB2    B2-B6       BUMP BIT COUNTER                            TRANDIS
          SB5    X7+B5       6*LOWER DIGIT+6. THIS IS THE SHIFT CONSTANT TRANDIS
          LX5    B5,X5       SHIFT TRANSLATED CHAR TO BITS 0-5           TRANDIS
          BX7    X4*X5       ISOLATE CHARACTER                           TRANDIS
          EQ     B7,LCTRANS2 JUMP IF LAST CHARACTER IS TRANSLATED        TRANDIS
          BX6    X6+X7       ADD TRANSLATED CHARACTER TO OUTPUT WORD     TRANDIS
          NE     B2,B3,*+1   JUMP IF WORD NOT COMPLETELY TRANSLATED      TRANDIS
          SA1    A1+B1       LOAD NEXT WORD TO BE TRANSLATED             TRANDIS
          LX1    1                                                       TRANDIS
          NE     B2,TRN2CHAR JUMP IF OUTPUT WORD NOT FULL YET            TRANDIS
          SA6    A6+B1       STORE TRANSLATED WORD                       TRANDIS
          MX6    0           CLEAR TRANSLATED KEY REGISTER FOR NEXT WORD TRANDIS
          SB2    A2          RESET BIT COUNTER                           TRANDIS
          EQ     TRN2CHAR                                                TRANDIS
 LCTRANS2 BX6    X6+X7       ADD LAST CHARACTER TO OUTPUT WORD           TRANDIS
          LX6    B2,X6       LEFT JUSTIFY TRANSLATED KEY IN OUTPUT WORD  TRANDIS
          SA6    A6+B1       STORE TRANSLATED KEY                        TRANDIS
          EQ     TRN2$IS                                                 TRANDIS
          END                                                            TRANDIS
