*DECK C$AL2AE 
          IDENT  C$AL2AE
          TITLE  C.AL2AE - MOVE ALL LITERAL TO AN ALPHA EDITED FIELD
  
          MACHINE  ANY,I
          COMMENT  MOVE ALL LITERAL TO AN ALPHA EDITED FIELD
          SPACE  4
**        C.AL2AE -  MOVE ALL LITERAL TO AN ALPHA EDITED FIELD
* 
*         X2 = 45/IGNORED,4/BCP,11/LENGTH 
*                BCP = BEGINNING CHARACTER POSITION OF SOURCE WITHIN X1 
*                LEN = NUMBER OF CHARACTERS IN SOURCE 
*         B3 = ADDRESS DESTINATION DESCRIPTOR 
*                12/IGNORED 
*                18/ADDRESS OF DESTINATION, 
*                2/IGNORED, 
*                4/BCP OF DESTINATION,
*                4*6/EDIT COMMANDS
*         B4 = ADDRESS SOURCE 
* 
*         NOT USED = A0, A4, A7, X4 
* 
*         RJ     C.AL2AE
* 
*         CODING PRIORITIES-
*                1)  BE FAST. 
*                2)  BE SMALL IN SIZE.
          EJECT 
**        GETEDIT - GET NEXT EDIT CHARACTER 
* 
*         GETEDIT 
* 
*         RETURNS THE NEXT EDIT OCTAL CHARACTER RIGHT-JUSTIFIED IN X5.
*         REFRESHES THE EDIT COMMAND WORD X3 FROM MEMORY IF NECESSARY.
* 
*         A3 = ADDRESS OF CURRENT EDIT COMMAND WORD 
*         B5 = NUMBER OF EDIT CHARACTERS (3 BITS) IN CURRENT WORD 
*         B1 = 1
*         X7 = 77777777777777777770B
*         X5 = EDIT CHARACTER (3 BITS) RIGHT-JUSTIFIED ZERO FILLED
*         X3 = CURRENT EDIT COMMAND WORD
  
  
 GETEDIT  MACRO 
          LOCAL  SAMEWRD
          BX5    -X7*X3      EXTRACT EDIT CHARACTER 
          SB5    B5-B1       NUMBER OF EDIT CHARS LEFT IN CURRENT WORD
          NZ     B5,SAMEWRD 
          SA3    A3+B1       GET NEXT EDIT COMMAND WORD 
          SB5    20          NUMBER OF EDIT CHARS LEFT IN NEW WORD
 SAMEWRD  LX3    3           RIGHT JUSTIFY NEXT EDIT CHARACTER
 GETEDIT  ENDM
          EJECT 
**        PUTCHAR -  ADD CURRENT CHARACTER TO DESTINATION SLOT. 
* 
*         PUTCHAR 
* 
*         INSERTS THE DISPLAY CHARACTER WHICH IS IN X5 INTO THE SLOT
*         CURRENTLY RIGHT JUSTIFIED IN X6. STORES X6 IN MEMORY
*         WHEN NECESSARY AND RESETS REGISTERS APPROPRIATELY.
* 
* 
*         A6 = ADDRESS - 1 OF DESTINATION WORD
*         A5 = SCRATCH
*         A2 = SCRATCH
*         B4 = NUMBER OF SLOTS AVAILABLE IN DESTINATION WORD
*         B1 = 1
*         X6 = DESTINATION WORD. CURRENT SLOT IS RIGHT-JUSTIFIED
*         X5 = CHAR. TO BE STORED. RIGHT-JUSTIFIED AND ZERO FILLED
*         X2 = SCRATCH
*         X0 = 77777777777777777700B
* 
* 
  
 PUTCHAR  MACRO 
          LOCAL  SAMEWRD
          BX6    X0*X6       CLEAR DESTINATION SLOT (RIGHT 6 BITS)
          BX6    X6+X5       INSERT CHARACTER INTO DESTINATION SLOT 
          SB4    B4-B1       NUMBER OF DEST. SLOTS LEFT IN THIS WORD
          NZ     B4,SAMEWRD 
          SA6    A6+B1       STORE CURRENT DESTINATION WORD 
          SA2    A6+B1       GET NEXT DESTINATION WORD
          BX6    X2 
          SB4    10          NUMBER OF SLOTS AVAILABLE IN NEW WORD
 SAMEWRD  LX6    6           RIGHT-JUSTIFY NEXT DESTINATION SLOT
 PUTCHAR  ENDM
          EJECT 
          ENTRY  C.AL2AE
 C.AL2AE  DATA   0
          SA1    B4          SOURCE ADDRESS 
          SX6    B4 
          SA6    SWORD1 
          SA3    B3          DESTINATION DESCRIPTOR ADDRESS 
          BX5    X2          BCP IN FIRST WORD AND LENGTH OF SOURCE 
          MX6    -11
          BX2    -X6*X5      EXTRACT LENGTH OF SOURCE IN CHARACTERS 
          SB7    X2          TOTAL NUMBER OF SOURCE CHARACTERS LEFT 
          BX6    X2 
          SA6    TOTCHAR
          AX5    11 
          MX6    -4 
          BX5    -X6*X5      EXTRACT BCP IN FIRST WORD OF SOURCE
          SX5    X5+B1       CHANGE IT TO COUNT FROM 1 FOR FIRST CHAR 
          IX2    X5+X2       BCP + LENGTH OF SOURCE 
          SB6    X2-11
          NG     B6,ONEWORD  IF SOURCE ENTIRELY CONTAINED IN 1 WORD 
          SX2    11 
 ONEWORD  IX2    X2-X5       NUMBER OF SOURCE CHARACTERS LEFT IN X1 
          BX6    X2 
          SA6    CINWRD1
          SB6    X2 
          IX7    X5+X5       BCP*2
          LX5    2           BCP*4
          IX7    X7+X5       BCP*6
          SB3    X7 
          LX1    X1,B3       RIGHT-JUSTIFY FIRST SOURCE CHARACTER 
          SX6    B3 
          SA6    RSCOUNT
          LX3    30          RIGHT-JUSTIFY DESTINATION ADDRESS
          SA5    X3-1        (FWA OF DESTINATION) - 1 
          BX6    X5 
          SA6    A5          INITIALIZE A6 TO (FWA OF DESTINATION) - 1
          SA5    X3          GET FIRST WORD OF DESTINATION
          BX6    X5 
          MX7    -4          77777777777777777760B TO GET BCP OF DEST.
          LX3    6           RIGHT-JUSTIFY BCP
          BX5    -X7*X3      EXTRACT BCP OF FIRST DESTINATION SLOT
          SB2    X5+B1       CHANGE IT TO COUNT FROM 1 FOR FIRST CHARACTER
          SB5    B2+B2       BCP*2
          SB2    B5+B5       BCP*4
          SB2    B2+B5       BCP*6
          LX6    X6,B2       RIGHT-JUSTIFY FIRST DESTINATION SLOT 
          SB4    10 
          SB2    X5 
          SB4    B4-B2       NUMBER OF SLOTS TO BE FILLED IN DEST. WORD 
          SB5    8           8 EDIT COMMAND CHARACTERS LEFT IN X3 
          LX3    3           RIGHT-JUSTIFY FIRST EDIT CMD. CHAR (3 BITS)
          MX0    -6          77777777777777777700B TO GET 1 DISPLAY CHAR
          MX7    -3          77777777777777777770B TO GET 1 OCTAL CHAR
* 
*      REGISTER USAGE DURING EXECUTION OF EDIT COMMANDS 
* 
*         A6 = ADDRESS OF LAST-STORED RESULT
*         A5 = SCRATCH
*         A3 = ADDRESS OF CURRENT EDIT COMMAND WORD 
*         A2 = SCRATCH
*         A1 = ADDRESS OF CURRENT SOURCE WORD   (UNLESS SIGN TYPE = 111)
*         B7 = TOTAL NUMBER OF SOURCE CHARACTERS
*         B6 = NUMBER OF SOURCE CHARACTERS LEFT IN CURRENT WORD 
*         B5 = NUMBER OF EDIT CHARACTERS LEFT IN CURRENT WORD 
*         B4 = NUMBER OF AVAILABLE CHARACTERS LEFT IN DEST. CURRENT WORD
*         B3 = SCRATCH
*         B2 = SCRATCH
*         B1 = 1
*         X7 = 77777777777777777770B
*         X6 = CURRENT RESULT. NEXT DEST. SLOT IS RIGHT-JUSTIFIED 
*         X5 = SCRATCH
*         X3 = CURRENT EDIT COMMAND WORD. NEXT CHAR IS RIGHT-JUSTIFIED
*         X2 = SCRATCH
*         X1 = CURRENT SOURCE WORD. NEXT SOURCE CHAR IS RIGHT-JUSTIFIED 
*         X0 = 77777777777777777700B
* 
  
  
*                            READ NEXT EDIT INSTRUCTION 
 RNI      GETEDIT            GET COMMAND OPCODE RIGHT-JUSTIFIED IN X5 
          SB2    X5 
          GETEDIT            GET REPEAT COUNT RIGHT-JUSTIFIED IN X5 
          NZ     B2,NOTZERO 
          SB2    X5 
          EQ     DATA        OPCODE = 000  DATA 
  
 NOTZERO  SB3    B1+B1
          NE     B2,B3,NOTTWO 
          SB2    X5 
          EQ     INSERT      OPCODE = 010  INSERT 
  
 NOTTWO   SB3    B3+B1
          NE     B2,B3,END   OPCODE = 111  END-OF-EDIT
          SB2    X5 
          EQ     LONG        OPCODE = 011  LONG COPY, LONG INSERT 
  
          EJECT 
  
 DATA     ZR     B2,RNI      IF REPEAT COUNT = ZERO 
          BX5    -X0*X1      EXTRACT CURRENT SOURCE CHARACTER 
          PUTCHAR            MOVE SOURCE CHAR INTO DESTINATION SLOT 
          SB2    B2-B1
          SB7    B7-B1       TOTAL NUMBER OF SOURCE CHARACTERS LEFT 
          ZR     B7,DSTART
          SB6    B6-B1       NUMBER OF SOURCE CHARS LEFT IN CURRENT WORD
          ZR     B6,DNXTWORD
          LX1    6           RIGHT-JUSTIFY THE NEXT SOURCE CHARACTER
          EQ     DATA 
  
 DSTART   SA1    SWORD1      FWA OF SOURCE FOR NEXT REP OF ALL
          SA1    X1          GET FIRST WORD OF SOURCE 
          SA5    RSCOUNT     COUNT TO RIGHT-JUSTIFY FIRST SOURCE CHAR 
          SB3    X5 
          LX1    X1,B3
          SA5    CINWRD1     NUMBER OF SOURCE CHARACTERS IN FIRST WORD
          SB6    X5 
          SA5    TOTCHAR     TOTAL NUMBER OF SOURCE CHARACTERS
          SB7    X5 
          EQ     DATA 
  
 DNXTWORD SA1    A1+B1       GET NEXT WORD OF SOURCE
          LX1    6           RIGHT-JUSTIFY NEXT SOURCE CHARACTER
          SB6    10          NO. OF SOURCE CHARS. LEFT IN WORD AFTER THIS 
          GE     B7,B6,DATA 
          SB6    B7 
          EQ     DATA 
  
 INSERT   ZR     B2,INSKIP   IF REPEAT COUNT = ZERO SKIP INSERTION
          GETEDIT            GET FIRST 3 BITS OF INSERTION CHARACTER
          BX2    X5 
          GETEDIT            GET LAST 3 BITS OF INSERTION CHARACTER 
          LX2    3
          BX5    X2+X5       RECONSTRUCT INSERTION CHARACTER
 INCHAR   PUTCHAR            MOVE INSERTION CHARACTER TO DEST. SLOT 
          SB2    B2-B1       REPEAT COUNT 
          NZ     B2,INCHAR
          EQ     RNI
  
 INSKIP   GETEDIT            SKIP FIRST 3 BITS OF INSERTION CHARACTER 
          GETEDIT            SKIP FINAL 3 BITS OF INSERTION CHARACTER 
          EQ     RNI
  
 LONG     GETEDIT            GET FIRST 3 BITS OF LONG REPEAT COUNT
          BX2    X5 
          GETEDIT            GET SECOND 3 BITS OF LONG REPEAT COUNT 
          LX2    3
          BX2    X2+X5
          GETEDIT            GET THIRD 3 BITS OF LONG REPEAT COUNT
          LX2    3
          BX2    X2+X5
          GETEDIT            GET FOURTH 3 BITS OF LONG REPEAT COUNT 
          LX2    3
          BX2    X2+X5
          SB3    B2          0 = LONG COPY,  2 = LONG INSERT
          SB2    X2          REPEAT COUNT 
          ZR     B3,DATA
          EQ     INSERT 
  
 END      SX2    B4-B1       NUMBER OF SLOTS TO SHIFT 
          IX5    X2+X2       2*NUMBER OF SLOTS
          LX2    2           4*NUMBER OF SLOTS
          IX5    X5+X2       6*NUMBER OF SLOTS = NO. BITS TO SHIFT
          SB3    X5 
          LX6    X6,B3       CORRECTLY POSITIONS WORD CONTENTS
          SA6    A6+B1
 ENDREAL  EQ     C.AL2AE     EXIT ALL LITERAL TO ALPHA EDITED 
  
 CINWRD1  BSS    1           NO. OF SOURCE CHARS IN FIRST SOURCE WORD 
 RSCOUNT  BSS    1           NO. OF BITS TO SHIFT FIRST WORD LEFT 
 SWORD1   BSS    1           ADDRESS OF FIRST WORD OF SOURCE
 TOTCHAR  BSS    1           TOTAL NUMBER OF SOURCE CHARACTERS
  
          END                END OF SUBROUTINE
