*DECK GMOVND
          IDENT  GMOVND 
          TITLE  GMOVND - GENERATE ND2XX MOVES
  
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE ND2XX MOVES 
          LIST   F
          SPACE  4
**        GMOVND - GENERATE ND2XX MOVES 
* 
* ND2AE   LINK   CGND2AE
* ND2AN   LINK   CGND2AN
* ND2C1   LINK   CGND2C1
* ND2C2   LINK   CGND2C2
* ND2C4   LINK   ND2C4
* ND2ND   LINK   CGND2ND
* ND2NE   LINK   CGND2NE
* ND2RA   LINK   CGND2RA
* ND2R1   LINK   CGND2R1
* ND2R2   LINK   CGND2R2
* ND2R4   LINK   CGND2R4
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
  
  
  
*      COMDECKS 
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
*CALL CCT 
  
          EJECT 
 GMOVND   MODULE
  
*      REGTABLE EQUATES 
  
  
 MOVEREGA EQU    REGB 
 MOVEREGB EQU    REGC 
 MOVEREGD EQU    REGQ 
 MOVEREGE EQU    REGR 
 MOVEREGF EQU    REGS 
 MOVEREGM EQU    REGM 
  
*      VIRTUAL REGISTER EQUATES 
  
 VREGA    EQU    VREG1
 VREGB    EQU    VREG2
 VREGC    EQU    VREG3
 VREGD    EQU    VREG9
 VREGE    EQU    VREG5
 VREGF    EQU    VREG6
 VREGG    EQU    VREG7
 VREGH    EQU    VREG8
 VREGI    EQU    VREG9
 VREGJ    EQU    VREG10 
 VREGK    EQU    VREG11 
 VREGL    EQU    VREG12 
 VREGU    EQU    VREG16 
 VREGV    EQU    VREG17 
 VREGW    EQU    VREG18 
 VREGX    EQU    VREG4
 VREGAC   EQU    VREG1
  
*      FIXED TABLE EQUATES
  
                                                 ND2ND
 SPECSIGN EQU    T3 
 SPECCASE EQU    T3 
 ALIGNER  EQU    T4 
 NEXTLOAD EQU    T5 
 NEXTSTOR EQU    T6 
 SIGNWORD EQU    T7 
 SIGNSHFT EQU    T8 
 INCR     EQU    T9 
 DONE     EQU    T10
 LOADREG  EQU    T11
 STOREREG EQU    T12
 BCP6OFB  EQU    P3 
 ECP6OFB  EQU    P4 
 BCP6OFC  EQU    P5 
 ECP6OFC  EQU    P6 
                                                 ND2RN
 LSIGNLEN EQU    T3 
 DIFF     EQU    T4 
 LEN      EQU    T5 
                                                 (MISC.)
 SAVEP1   EQU    P9          ND2NEE 
  
                                                 LABEL NUMBERS
 LABEL1   EQU    P9          LABEL NUMBER FOR LABEL *LOCLAB1* 
  
*      MISCELLANEOUS EQUATES
  
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 ND2AE    KNIL   CGND2AE
 ND2AN    KNIL   CGND2AN
 ND2C1    KNIL   CGND2C1
 ND2C2    KNIL   CGND2C2
 ND2C4    KNIL   ND2C4
 ND2ND    KNIL   CGND2ND
 ND2NE    KNIL   CGND2NE
 ND2RA    KNIL   CGND2RA
 ND2R1    KNIL   CGND2R1
 ND2R2    KNIL   CGND2R2
 ND2R4    KNIL   CGND2R4
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 CEDITPAT EXECUTE EDITPAT 
          RETURN
  
  
 ADNAT    LINK   ADNAT       * TO CGSTART 
 ADPDNAT  LINK   ADPDNAT     * TO CGSTART 
 AN2AE    LINK   CGAN2AE     * TO GMOVAN
 AN2AN    LINK   CGAN2AN     * TO GANMOVE 
 AN2RA    LINK   CGAN2RA     * TO GMOVAN
 CGREGMV  LINK   CGREGMV     COPY REGTABLE ENTRY
 EDITPAT  LINK   EDITPAT     * TO 
 GTADBCP  LINK   CGGTABP     * TO GMOVSUB 
 ND2RN    LINK   CGND2RN     * TO GMOVLOD 
 PERMDNAT LINK   ADPDNAT     * TO CGSTART 
 RN2AN    LINK   CGRN2AN     * TO GMOVRN
 RN2AE    LINK   CGRN2AE     * TO GMOVRN
 RN2ND    LINK   CGRN2ND     * TO GMOVSTO 
 RN2R1    LINK   CGRN2R1     * TO GMOVRN
 RN2R2    LINK   CGRN2R2     * TO GMOVRN
 RN2R4    LINK   CGRN2R4     * TO GMOVRN
 STORC1C2 LINK   CGSTORC     * TO GMOVSUB 
 STORC4   LINK   STORC4      * TO GMOVSUB 
 SUBDNAT  LINK   SUBDNAT     * TO CGSTART 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 CBSTRP   SETSY  (EXT$OF,C.STRP)
 CBZEROS  SETSY  (EXT$OF,C.ZEROS) 
 CBZNM33B SETSY  (EXT$OF,C.ZN),-1R0 
 FWAPATT  SETSY  (FWA$OF,REGT)
 FWARECP1 SETSY  (FWA$OF,REGC),1
 FWARECV  SETSY  (FWA$OF,REGC)
 FWASOURC SETSY  (FWA$OF,REGB)
 FWASRCP1 SETSY  (FWA$OF,REGB),1
 FWASRCT3 SETSY  (FWA$OF,REGB),T3 
 LOCLAB1  SETSY  (LOCAL$OF,LABEL1)
 LWARECV  SETSY  (LWA$OF,REGC)
 LWASOURC SETSY  (LWA$OF,REGB)
          SPACE  4
          LISTSEC  ND2AE
          TITLE  ND2AE -  NUMERIC DISPLAY ITEM TO ALPHANUMERIC-EDITED IT
,EM 
**        ND2AE -  NUMERIC DISPLAY ITEM TO ALPHANUMERIC-EDITED ITEM 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 9PP _ -2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS A LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF DESTINATION HAS A SEPARATE SIGN. 
* 
*         CALLZ  ND2AE
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU2
*                REGU1       (BY RN2AE) 
  
  
 ND2AE    EGO    2
          NOTE   ND2AE
  
          IFTHEN ((SIGNOF,REGB),EQ,0)            IF SOURCE UNSIGNED 
           ANDIF ((NUMLENOF,REGB),EQ,(NUMLENOF,REGC)) 
           ANDIF ((POINTOF,REGB),EQ,0)              AND NOT 99P (E.G.)
           ANDIF ((CCTBIT,LBZ),EQ,0)                AND LEAD BLANKS = ZR
            CALLZ  AN2AE
            RETURN
            ENDIFZ
  
*      CREATE A TEMPORARY REGISTER REGTABL/DNAT ENTRY CALLED REGU2
  
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT
  
*      MOVE ND (IN REGB) TO RN (IN REGU2) 
  
          MOVEZ  (INTLENOF,REGB),(NUMLENOF,REGU2) 
*         MOVEZ  0,(POINTOF,REGU2)               (SET BY *ADNAT*) 
*         MOVEZ  0,(SIGNOF,REGU2)                (SET BY *ADNAT*) 
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU2,REGC                      THIS DEST. IS REGU2
          CALLZ  ND2RN                           MOVE (REGB) TO (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      MOVE RN (IN REGU2) TO AE (IN REGC) 
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU2,REGB                      THIS SOURCE IS REGU2 
          CALLZ  RN2AE                           MOVE (REGB) TO (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  ND2AN
          TITLE  ND2AN -  NUMERIC DISPLAY ITEM TO ALPHANUMERIC ITEM 
**        ND2AN -  NUMERIC DISPLAY ITEM TO ALPHANUMERIC ITEM
* 
*         REGB = REGTABL INDEX TO SOURCE ITEM 
*         ((FWA$OF,REGB)) 
*         (WRDOFFOF,REGB) 
*         (BCPOF,REGB)
*         (NUMLENOF,REGB) 
*         (BYTLENOF,REGB) 
*         (POINTOF,REGB) = 0
*         (SIGNOF,REGB) 
*         (LDSIGNOF,REGB) 
*         (SCHAROF,REGB)
*         REGC = REGTABL INDEX TO DESTINATION ITEM
*         (BYTLENOF,REGC) \ (NUMLENOF,REGB) 
* 
*         CALLZ  ND2AN
* 
*         IF THE SOURCE IS SIGNED,  THE SIGN WILL BE STRIPPED 
  
  
 ND2AN    EGO    2
          IFZ    ((CCTBIT,LBZ),EQ,1),ND2AN2      IF LEAD BLANKS = ZERO
          IFZ    ((POINTOF,REGB),NE,0),ND2AN2    IF SOURCE = 9P (E.G.)
          IFZ    ((SIGNOF,REGB),EQ,1),ND2AN1     IF SOURCE SIGNED 
  
*                            SOURCE IS UNSIGNED 
*                            TREAT AS ALPHANUMERIC
          NOTE   ND2AN
          CALLZ  AN2AN
          RETURN
  
  
*                            SOURCE IS SIGNED 
 ND2AN1   LABEL 
          IFZ    ((SCHAROF,REGB),EQ,0),ND2AN2    IF OVERPUNCH SIGN
  
*                            SOURCE HAS SEPARATE SIGN 
          NOTE   ND2AN1 
  
*      CREATE A NEW REGTABL ENTRY AND A PERMANENT DNAT
  
          MOVEZ  REGU1,REGT 
          CALLZ  ADPDNAT
  
*      COPY ORIGINAL SOURCE REGTABL ENTRY TO NEW ENTRY
  
          MOVEZ  (GPTROF,REGU1),P3               SAVE DNAT INDEX
          MOVEZ  REGB,P1                         FROM 
          MOVEZ  REGU1,P2                        TO 
          EXECUTE  CGREGMV
          MOVEZ  P3,(GPTROF,REGU1)               RESTORE DNAT INDEX 
          MOVEZ  (WRDOFFOF,REGB),(WRDOFFOF,REGU1) 
          MOVEZ  (DNATOF,REGB),(DNATOF,REGU1)    REFER TO SAME ADDRESS
  
*      DELETE SIGN CHARACTER FROM NEW ENTRY 
  
          MINZ   (NUMLENOF,REGB),(BYTLENOF,REGC),(BYTLENOF,REGU1) 
          ADDZ   (BCPOF,REGB),(LDSIGNOF,REGB),(BCPOF,REGU1) 
          IFTHEN ((BCPOF,REGU1),EQ,10)
            MOVEZ  0,(BCPOF,REGU1)
            ADDZ   (WRDOFFOF,REGB),1,(WRDOFFOF,REGU1) 
            ENDIFZ
  
*      MOVE PSEUDO-AN (IN REGU1) TO AN (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU1,REGB 
          CALLZ  AN2AN
          POP    REGB                            RESTORE ORIGINAL SOURCE
          RETURN
  
  
*                            SOURCE HAS OVERPUNCH SIGN
*                       OR,  MUST CONVERT LEADING BLANKS TO ZERO
*                       OR,  MUST SCALE SOURCE  (E.G. 99PPP)
 ND2AN2   LABEL 
          NOTE   ND2AN2 
  
*      CREATE TEMPORARY DNAT REFERENCE BY REGTABL ENTRY REGU1 
  
          MOVEZ  REGU1,REGT 
          CALLZ  ADNAT
  
*      MOVE ND (IN REGB) TO UNSIGNED RN (IN REGU1)
  
          MOVEZ  (INTLENOF,REGB),(NUMLENOF,REGU1) 
*         MOVEZ  0,(POINTOF,REGU1)               (SET BY *ADNAT*) 
*         MOVEZ  0,(SIGNOF,REGU1)                (SET BY ADPDNAT) 
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU1,REGC                      THIS DEST. IS REGU1
          CALLZ  ND2RN                           MOVE (REGB) TO (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      MOVE RN (IN REGU1) TO AN (IN REGC) 
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU1,REGB                      THIS SOURCE IS REGU1 
          CALLZ  RN2AN                           MOVE (REGB) TO (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
          RETURN
          RETURN
          SPACE  4
          LISTSEC  ND2C1
          TITLE  ND2C1 -  NUMERIC DISPLAY TO COMP-1 REGISTER
**        ND2C1 -  NUMERIC DISPLAY ITEM TO COMP-1 ITEM
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 99V9 _ 1)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNED,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOURCE HAS SEPARATE SIGN.
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION ITEM.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION FIELD.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 9PPP _ 3)
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  ND2C1
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU3
*                REGU2
*                SAVREGB1 
*                SAVREGC2 
*                REGU1       (BY RN2R1) 
*                SAVREGC1    (BY RN2R1) 
  
  
 ND2C1    EGO    2
          NOTE   ND2C1
  
*      CREATE DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU2),REGT             REGU2 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
  
*      CONVERT ND (IN REGB) TO RN (IN REGU2)
  
          PUSH   REGC 
          MOVEZ  (EQUALS,REGU2),REGC             THIS DEST. IS REGU2
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CREATE ANOTHER DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU3),REGT             REGU3 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (POINTOF,REGU2),(POINTOF,REGU3)
          MOVEZ  (NUMLENOF,REGU2),(NUMLENOF,REGU3)
          MOVEZ  (SIGNOF,REGU2),(SIGNOF,REGU3)
  
*      CONVERT RN (IN REGU2) TO R1 (IN REGU3) 
  
          PUSH   REGB,REGC
          MOVEZ  (EQUALS,REGU2),REGB             THIS SOURCE IS REGU2 
          MOVEZ  (EQUALS,REGU3),REGC             THIS DEST. IS REGC 
          CALLZ  RN2R1                           CONVERT (REGB) _ (REGC)
          POP    REGB,REGC
  
*      STORE THE RESULT 
  
 ND2C11   LABEL                                  (CROSS-REFS ONLY)
          NOTE   ND2C11 
          MOVEZ  (TREGOF,REGU3),P1
          CALLZ  STORC1C2 
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  ND2C2
          TITLE  ND2C2 -  NUMERIC DISPLAY ITEM TO COMP-2 ITEM 
**        ND2C2 -  NUMERIC DISPLAY ITEM TO COMP-2 ITEM
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOURCE HAS SEPARATE SIGN.
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION ITEM.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION FIELD.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  ND2C2
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU4
*                REGU3
*                SAVREGB1 
*                SAVREGC3 
*                REGU2       (BY RN2R2) 
*                SAVREGC2    (BY RN2R2) 
*                REGU1       (BY RN2R2) 
*                SAVREGC1    (BY RN2R2) 
  
  
 ND2C2    EGO    2
          NOTE   ND2C2
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU3),REGT             REGU3 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU3) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU3) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU3) 
  
*      CONVERT ND (IN REGB) TO RN (IN REGU3)
  
          PUSH   REGC 
          MOVEZ  (EQUALS,REGU3),REGC             THIS DEST. IS REGU3
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CREATE ANOTHER DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU4),REGT             REGU4 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (SIGNOF,REGU3),(SIGNOF,REGU4)
  
*      CONVERT RN (IN REGU3) TO R2 (IN REGU4) 
  
          PUSH   REGB,REGC
          MOVEZ  (EQUALS,REGU3),REGB             THIS SOURCE IS REGU2 
          MOVEZ  (EQUALS,REGU4),REGC             THIS DEST. IS REGU4
          CALLZ  RN2R2                           CONVERT (REGB) _ (REGC)
          POP    REGB,REGC
  
*      STORE THE RESULT 
  
 ND2C21   LABEL                                  (CROSS-REFS ONLY)
          NOTE   ND2C2
  
          MOVEZ  (TREGOF,REGU4),P1
          CALLZ  STORC1C2 
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
  
          RETURN
          SPACE  4
          LISTSEC  ND2C4
          TITLE  ND2C4  - NUMERIC DISPLAY TO COMP-4 ITEM
**        ND2C4 - NUMERIC DISPLAY ITEM TO COMP-4 ITEM 
* 
*         REGB= DNAT POINTER TO SOURCE ITEM 
*         REGC= DNAT POINTER TO DESTINATION ITEM
*         CALLZ  ND2C4
* 
*         GENERATE CODE TO PERFORM THE INDICATED MOVE 
 ND2C4    EGO    2
          NOTE   ND2C4
*      CREATE DUMMY DNAT
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
*      CONVERT ND IN REGB TO RN IN REGU2
          PUSH   REGC 
          MOVEZ  REGU2,REGC 
          CALLZ  ND2RN                           CONVERT RB TO RC 
          POP    REGC 
*      CREATE ANOTHER DUMMY DNAT
          MOVEZ  REGU3,REGT 
          CALLZ  ADNAT
          MOVEZ  (POINTOF,REGU2),(POINTOF,REGU3)
          MOVEZ  (NUMLENOF,REGU2),(NUMLENOF,REGU3)
          MOVEZ  (SIGNOF,REGU2),(SIGNOF,REGU3)
* 
*      CONVERT RN IN REGU2 TO R1 IN REGU3 
          PUSH   REGB,REGC
          MOVEZ  REGU2,REGB 
          MOVEZ  REGU3,REGC 
          CALLZ  RN2R1
          POP    REGB,REGC
*      STORE RESULT 
 ND2C41   LABEL 
          NOTE   ND2C41 
          MOVEZ  (TREGOF,REGU3),P1
          CALLZ  STORC4 
* 
          CALLZ  SUBDNAT
          CALLZ  SUBDNAT
          RETURN
          SPACE  4
          LISTSEC  ND2ND
          TITLE  ND2ND -  (SIGNED) NUMERIC DISPLAY TO (SIGNED) NUMERIC D
,ISPLAY 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*  ND2ND -  NUMERIC DISPLAY TO NUMERIC DISPLAY MOVE PROCESSOR         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
  
*         REGISTER USAGE- 
*                VREGA       ALIGNED WORD FROM (REGB) 
*                VREGB       NEXT WORD FROM (REGB)
*                VREGC       10H0000000000
*                VREGD       77777777777777777700B
*                VREGE       SIGN 
*                VREGF       RESULT 
*                VREGG       TEMP 
*                VREGH       TEMP 
          EJECT 
 RETURN   MICRO  1,, ND2ND1 
 ND2ND    EGO    2
  
          NOTE   ND2ND
*      CHECK IF ABLE TO BE PROCESSED BY ALPHANUMERIC MOVE PROCESSOR 
*      (-AN2AN-), WITH DISPLAY ZERO INSTEAD OF BLANK FILL.
          NOTZ   ((CCTBIT,LBZ),EQ,0),ND2ND3  JUMP IF -LBZ- CC OPTION
  
          IFTHEN ((POINTOF,REGB),EQ,(POINTOF,REGC)) 
           ANDIF ((NUMLENOF,REGB),EQ,(NUMLENOF,REGC)) 
           ANDIF ((SIGNOF,REGB),EQ,(SIGNOF,REGC)) 
           ANDIF ((SCHAROF,REGB),EQ,(SCHAROF,REGC)) 
           ANDIF ((LDSIGNOF,REGB),EQ,(LDSIGNOF,REGC)) 
            CALLZ  AN2AN                         GENERATE CODE FOR MOVE 
            RETURN
            ENDIFZ
  
          NOTZ   ((GSCODEOF,REGB),EQ,0),ND2ND3  JUMP IF SRC OR RCV
          NOTZ   ((GSCODEOF,REGC),EQ,0),ND2ND3   VARIABLY SUBSCRIPTED 
          NOTZ   ((SIGNOF,REGB),EQ,0),ND2ND3  JUMP IF SRC OR RCV SIGNED 
          NOTZ   ((SIGNOF,REGC),EQ,0),ND2ND3
          MOVEZ  (POINTOF,REGB),T3
          MOVEZ  (POINTOF,REGC),T4
          IFZ    (T3,LT,0),ND2ND3  JUMP IF ASSUMED DECIMAL POINT, E.G.
          IFZ    (T4,LT,0),ND2ND3   99PPP.
          MOVEZ  (NUMLENOF,REGB),T5 
          MOVEZ  (NUMLENOF,REGC),T6 
          IFZ    (T3,GT,T5),ND2ND3  JUMP IF ASSUMED DECIMAL POINT, E.G. 
          IFZ    (T4,GT,T6),ND2ND3   PP999
          IFTHEN  (T3,EQ,T4)  IF IDENTICAL DECIMAL POSITIONS, TREAT LIKE
*                              AN TO AN JUSTIFIED RIGHT 
            CALLZ  ND2ND2    CREATE DNAT FOR RCV WITH JUSTIFIED RIGHT 
            CALLZ  AN2AN     GENERATE CODE FOR MOVE 
            RETURN
          ENDIFZ
          SUBZ   T5,T3,T7    SRC LENGTH OF INTEGER PORTION
          SUBZ   T6,T4,T8    RCV LENGTH OF INTEGER PORTION
          IFTHEN  (T7,EQ,T8)  IF IDENTICAL INTEGER PORTION LENGTHS, 
*                              TREAT LIKE AN TO AN
            CALLZ  AN2AN     GENERATE CODE FOR MOVE 
            RETURN
          ENDIFZ
          IFTHEN  (T8,GT,T7)  JUMP (CANNOT USE -AN2AN-) IF RCV INTEGER
           ANDIF  (T4,GT,T3)   PORTION AND DECIMAL PORTION GT THOSE OF
            BRANCH  ND2ND3     SRC, I.E. CANNOT PAD ON BOTH ENDS
          ENDIFZ
          IFTHEN  (T3,GT,T4)  IF DECIMAL LENGTH SRC GT RCV, TRUNCATE
*                              SRC ON RIGHT AND TREAT LIKE AN TO AN 
*                              JUSTIFIED RIGHT
            CALLZ  ND2ND1    CREATE DNAT FOR SRC POINTED TO VIA REGB
            SUBZ  T3,T4,T9   DECIMAL SIZE SRC - DECIMAL SIZE RCV
            SUBZ  T5,T9,(BYTLENOF,REGB)  TRUNCATED SIZE SRC TO NEW DNAT 
            CALLZ  ND2ND2    CREATE DNAT FOR RCV WITH JUSTIFIED RIGHT 
            CALLZ  AN2AN     GENERATE CODE FOR MOVE 
            RETURN
          ENDIFZ
*                            DECIMAL LENGTH SRC LT RCV, TRUNCATE SRC ON 
*                             LEFT AND TREAT LIKE AN TO AN
            CALLZ  ND2ND1    CREATE DNAT FOR SRC POINTED TO VIA REGB
            SUBZ  T7,T8,T9   INTEGER SIZE SRC - INTEGER SIZE RCV
            SUBZ  T5,T9,(BYTLENOF,REGB)  TRUNCATED SIZE SRC INTO DNAT 
            ADDZ  T9,(BCPOF,REGB),T10  ADJUST BCP BY AMOUNT OF LEFT 
            REMZ  T10,10,(BCPOF,REGB)   TRUNCATION
            QUOTZ  T10,10,T11 
            ADDZ  (REGWIXOF,REGU2),T11,(REGWIXOF,REGU2)  ADJUST FOR BCP 
*                                                      BEING IN NEW WORD
            CALLZ  AN2AN     GENERATE CODE FOR MOVE 
            RETURN
* 
*         ND2ND1  - CREATE A DNAT ENTRY FOR SOURCE ITEM, A REGTABLE 
*                   ENTRY WHICH POINTS TO IT, AND -REGB- TO POINT TO
*                   NEW REGTABLE ENTRY
* 
 ND2ND1   LABEL 
          NOTE   ND2ND1 
          MOVEZ  (EQUALS,REGU2),REGT
          CALLZ  ADPDNAT     ALLOCATE DNAT ENTRY POINTED TO VIA REGT
          MOVEZ  REGB,P1      (T1)=INDEX OF NEW DNAT ENTRY
          MOVEZ  REGT,P2
          EXECUTE  CGREGMV   COPY REGTABLE INFO FROM REGB TO REGT 
          MOVEZ  T1,(REGPTROF,REGT)  POINT TO NEW DNAT ENTRY
          MOVEZ  (DNATOF,REGB),(DNATOF,REGT)  REGB DNAT TO REGT DNAT
          MOVEZ  REGT,REGB   REGB POINTS TO NEW SOURCE DNAT 
          RETURN
* 
*         ND2ND2  - CREATE A DNAT ENTRY FOR RECEIVING ITEM JUSTIFIED
*                   RIGHT, A REGTABLE ENTRY WHICH POINTS TO IT, AND 
*                   -REGC- TO POINT TO NEW REGTABLE ENTRY 
* 
 ND2ND2   LABEL 
          NOTE   ND2ND2 
          MOVEZ  (EQUALS,REGU3),REGT
          CALLZ  ADPDNAT     ALLOCATE DNAT ENTRY POINTED TO VIA REGT
          MOVEZ  REGC,P1      (T1)=INDEX OF NEW DNAT ENTRY
          MOVEZ  REGT,P2
          EXECUTE  CGREGMV   COPY REGTABLE INFO FROM REGC TO REGT 
          MOVEZ  T1,(REGPTROF,REGT)  POINT TO NEW DNAT ENTRY
          MOVEZ  (DNATOF,REGC),(DNATOF,REGT)  REGC DNAT TO REGT DNAT
          MOVEZ  1,(JUSTOF,REGT)  JUSTIFIED RIGHT 
          MOVEZ  REGT,REGC   REGC POINTS TO NEW DNAT
          RETURN
  
*      MOVE DOES NOT QUALIFY FOR -AN2AN-
* 
 ND2ND3   LABEL 
          NOTE   ND2ND3 
          GEN    MASK,(VREGOF,VREGD),54  GENERATE CONSTANTS 
          GEN    SLRBPK,(VREGOF,VREGC),,CBZEROS 
  
*      CREATE DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU3),REGT             REGU3 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGT)
          MOVEZ  (POINTOF,REGC),(POINTOF,REGT)
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGT)
  
*      CONVERT ND (IN REGB) TO RN (IN REGU3)
  
          PUSH   REGC 
          MOVEZ  (EQUALS,REGU3),REGC             THIS DEST. IS REGU3
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CONVERT RN (IN REGU3) TO ND (IN REGC)
  
          PUSH   REGB 
          MOVEZ  (EQUALS,REGU3),REGB             THIS SOURCE IS REGU3 
          CALLZ  RN2ND                           CONVERT (REGB) _ (REGC)
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          MOVEZ  0,SPECCASE                      NOTE SPECIAL CASE
          RETURN
ND2NDC    EJECT 
          SPACE  4
          LISTSEC  ND2NE
          TITLE  ND2NE -  NUMERIC DISPLAY ITEM TO NUMERIC-EDITED ITEM 
**        ND2NE -  NUMERIC DISPLAY ITEM TO NUMERIC EDITED ITEM
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         ((FWA$OF,REGB)) = ADDRESS OF SOURCE ITEM. 
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 99V9 _ 1)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOURCE HAS SEPARATE SIGN.
*         REGC = DNAT POINTER TO DESTINATION ITEM.
* 
* 
*         CALLZ  ND2NE
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU4
*                REGU2
*                REGU1       (BY RN2NE) 
  
  
 ND2NE    EGO    2
  
*      CREATE DUMMY DNAT TO REFERENCE EDIT PATTERN
  
          MOVEZ  REGU2,REGT 
          CALLZ  PERMDNAT                        GET PERMANENT DNAT 
  
*      ANALYZE EDIT PATTERN AND MAYBE POOL EDIT PATTERN 
  
          MOVEZ  (INTLENOF,REGB),P1 
*         REGC = INDEX TO DESTINATION DNAT
*         REGT = INDEX TO DNAT FOR POSSIBLE EDIT PATTERN
          CALLZ  CEDITPAT 
*         SETS P1 
  
*      IF ZZZ CASE,  GO HANDLE
  
          IFTHEN (P1,NE,0)                       IF ZZZ CASE
            CALLZ  ND2NEE 
            RETURN
            ENDIFZ
  
*      HANDLE TRUNCATION OF SOURCE
  
          SUBZ (INTLENOF,REGB),(INTLENOF,REGC),T2 
          MAXZ T2,0,T2
  
          IFTHEN ((LDSIGNOF,REGB),EQ,1)          IF TRUNCATING SIGN 
           ANDIF (T2,NE,0)
            BRANCH ND2NE1                          GO HANDLE
            ENDIFZ
  
          SUBZ   (NUMLENOF,REGB),T2,P1           EDITED LENGTH
          ADDZ   T2,(BCPOF,REGB),T2 
  
          MOVEZ   0,T3
          IFTHEN (T2,GE,20) 
            SUBZ   T2,20,T2 
            MOVEZ  2,T3 
          ENDIFZ
          IFTHEN (T2,GE,10)                      IF OVERFLOWS WORD
            SUBZ   T2,10,T2                        0 @ BCP @ 9
            MOVEZ  1,T3                            INCREASE WORD BIAS 
            ENDIFZ
  
*      SET VREG1 = V.R.N. OF A/X-REGISTER FOR FIRST WORD OF SOURCE
*      SET VREG3 = V.R.N. OF X-REGISTER WITH SOURCE DESCRIPTOR
  
          IFTHEN (SENDSUBS,EQ,0)                 IF SOURCE NOT SUBSCR.
            CALLZ  ND2NEA 
          ELSEZ                                  IF SOURCE SUBSCRIPTED
            CALLZ  ND2NEB 
            ENDIFZ
  
*      SET VREG2 = V.R.N. OF A/X-REGISTER FOR DESTINATION DESCRIPTOR
  
          IFTHEN (RECSUBS,NE,0)    DESTINATION SUBSCRIPTED
            CALLZ  ND2NEC 
          ENDIFZ
          GEN    SBBPK,(VREGOF,VREG2),,((FWA$OF,REGU2)) 
  
*      NOW CALL C.EDIT
  
          IFTHEN ((CCTBIT,LBZ),EQ,1)
            GENOBJ  N=C.EDITA,I=(VREG1,VREG2,VREG3) 
          ELSEZ 
            GENOBJ  N=C.EDIT,I=(VREG1,VREG2,VREG3)
            ENDIFZ
  
          RETURN
          SPACE  4
  
*      MUST AVOID TRUNCATING LEADING SIGN 
  
 ND2NE1   LABEL 
          NOTE   ND2NE1 
  
*      CREATE TEMPORARY REGISTER REFERENCED BY REGU4
  
          MOVEZ  REGU4,REGT 
          CALLZ  ADNAT
          MINZ   (POINTOF,REGB),(POINTOF,REGC),(POINTOF,REGU4)
          ADDZ   (POINTOF,REGU4),(INTLENOF,REGC),(NUMLENOF,REGU4) 
          MOVEZ  1,(SIGNOF,REGU4) 
  
*      LOAD ND (IN REGB) INTO RN (IN REGU4) 
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU4,REGC                      THIS DEST. IS REGU4
          CALLZ  ND2RN                           MOVE (REGB) TO (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      EXTRACT SIGN AND SET UP SOURCE 
  
          GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGU4) 
          GEN    SHR,VREG4,59 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGU4),VREG4 
          MOVEZ  10,T1                           ASSUME 1-REGISTER SRC
  
            GEN    SSRBPK,VREG1,,((EXT$OF,C.BUFF))
          IFTHEN ((NUMLENOF,REGU4),GT,10) 
            GEN    LXOR,(VREGOF,VREG5),(TREGP1OF,REGU4),VREG4 
            GEN    SSRAPB,VREG5,VREG1,VREGB1
            MOVEZ  20,T1                         2-REGISTER SOURCE
            ENDIFZ
          GEN    SBBPK,(VREGOF,VREG1),,((EXT$OF,C.BUFF))
  
*      SET UP SOURCE DESCRIPTOR 
  
          SUBZ   T1,(NUMLENOF,REGU4),T1          4/BCP
          ADDZ   T1,64,T1                        3/SIGN=100, 4/BCP
          LSHIFT T1,11                           3/4, 4/BCP, 11/0 
          ADDZ   T1,(NUMLENOF,REGU4),T1          3/4, 4/BCP, 11/LEN 
          GEN    SXBPK,(VREGOF,VREG3),,T1 
  
*      SET UP DESTINATION DESCRIPTOR
  
          IFTHEN (RECSUBS,NE,0)    DESTINATION SUBSCRIPTED
            PUSH   VREG1,VREG3,VREG4
            CALLZ  ND2NEC 
            POP    VREG1,VREG3,VREG4
          ENDIFZ
          GEN    SBBPK,(VREGOF,VREG2),,((FWA$OF,REGU2)) 
  
*      CALL OBJECT ROUTINE,  WITH SIGN IN ITS OWN REGISTER
  
          GENOBJ N=C.EDITS,I=(VREG1,VREG2,VREG3,VREG4)
  
          CALLZ  SUBDNAT                         DELETE REGU4 DNAT
          RETURN
A         EJECT 
**        ND2NEA -  SET VREG1,VREG3 = SOURCE FIRST WORD, DESCRIPTOR 
*                   SOURCE IS NOT SUBSCRIPTED 
* 
*      GIVEN: 
*         P1 = (TRUNCATED) LENGTH OF SOURCE 
*         T2 = (TRUNCATED) BCP OF SOURCE
*         T3 = WORD BIAS FOR FIRST WORD OF SOURCE 
* 
*      DOES:  
*         SETS VREG1 = V.R.N. OF A/X-REGISTER FOR FIRST SOURCE WORD 
*         SETS VREG3 = V.R.N. OF X-REGISTER WITH SOURCE DESCRIPTOR
  
  
 ND2NEA   LABEL 
          NOTE   ND2NEA 
          GEN    SBBPK,(VREGOF,VREG1),,((FWA$OF,REGB),T3) 
          CALLZ  ND2NED                          SET T1 = TYPE OF SIGN
          LSHIFT T1,4                            3/SIGN, 4/0
          ADDZ   T1,T2,T1                        3/SIGN, 4/BCP
          LSHIFT T1,11                           3/SIGN, 4/BCP, 11/0
          ADDZ   T1,P1,T1                        3/SIGN, 4/BCP, 11/LEN
          GEN    SXBPK,(VREGOF,VREG3),,T1 
          RETURN
B         EJECT 
**        ND2NEB -  SET VREG1,VREG3 = SOURCE FIRST WORD, DESCRIPTOR 
*                   SOURCE IS SUBSCRIPTED 
* 
*      GIVEN: 
*         SENDSUBS = SUBSCRIPTING INFO FROM GTEXT.
*         P1 = (TRUNCATED) LENGTH OF SOURCE.
*         T2 = SOURCE BCP AFTER TRUNCATION. 
*         T3 = SOURCE WORD BIAS.
* 
*      DOES:  
*         SETS VREG1 = V.R.N. OF A/X-REGISTER WITH FIRST WORD OF SOURCE 
*         SETS VREG3 = V.R.N. OF SOURCE DESCRIPTOR. 
  
  
 ND2NEB   LABEL 
          NOTE   ND2NEB 
  
*      COMPUTE FWA AND BCP OF SOURCE AFTER SUBSCRIPTING 
  
          PUSH   P1                              SAVE (TRUNCATED) LENGTH
          MOVEZ  SENDSUBS,P1
          MOVEZ  T2,P2
          GEN    SXBPK,(VREGOF,VREG4),,((FWA$OF,REGB),T3) 
          CALLZ  GTADBCP
*         SETS VREG4 = V.R.N. OF X-REGISTER WITH ACTUAL FWA 
*         SETS VREG5 = V.R.N. OF X-REGISTER WITH ACTUAL BCP.
          POP    P1                              RESET TRUNCATED LENGTH 
  
*      NOW SET UP FIRST WORD AND DESCRIPTOR 
  
          GEN    SBXPB,(VREGOF,VREG1),VREG4 
          CALLZ  ND2NED                          SET T1 = TYPE OF SIGN
          LSHIFT T1,15                           3/SIGN, 4/0, 11/0
          ADDZ   T1,P1,T1                        3/SIGN, 4/0, 11/LEN
          GEN    SHL,VREG5,11                            4/BCP, 11/0
          GEN    SXXPK,(VREGOF,VREG3),VREG5,T1   3/SIGN, 4/BCP, 11/LEN
          RETURN
C         EJECT 
**        ND2NEC -  SET VREG2 TO DESTINATION DESCRIPTOR 
*                   DESTINATION IS SUBSCRIPTED
* 
*      GIVEN: 
*         RECSUBS = SUBSCRIPT INFORMATION FROM GTEXT. 
*         ((FWA$OF,REGU2)) = ADDRESS OF DESTINATION DESCRIPTOR. 
*         ((FWA$OF,REGC)) = ADDRESS OF DESTINATION AREA.
*         (BCPOF,REGC) = DESTINATION BCP. 
* 
*      DOES:  
*         SETS VREG2 = V.R.N. OF A/X-REGISTER OF DESTINATION DESCRIPTOR 
  
  
 ND2NEC   LABEL 
          NOTE   ND2NEC 
  
*      COMPUTE FWA AND BCP OF DESTINATION AFTER SUBSCRIPTING
  
          MOVEZ  RECSUBS,P1 
          MOVEZ  (BCPOF,REGC),P2
          GEN    SXBPK,(VREGOF,VREG4),,((FWA$OF,REGC))
          CALLZ  GTADBCP
*         SETS VREG4 = V.R.N. OF X-REGISTER WITH ACTUAL FWA 
*         SETS VREG5 = V.R.N. OF X-REGISTER WITH ACTUAL BCP.
  
          GEN    SLRBPK,(VREGOF,VREG2),,((FWA$OF,REGU2))
          GEN    SHL,VREG4,6                     18/FWA, 6/0
          GEN    LOR,(VREGOF,VREG4),VREG4,VREG5  18/FWA, 6/BCP
          GEN    SHL,VREG4,24                    30/FWA, 6/BCP, 24/0
          GEN    MASK,(VREGOF,VREG6),4
          GEN    SHL,VREG6,28 
          GEN    MASK,(VREGOF,VREG7),18 
          GEN    SHL,VREG7,48 
          GEN    LOR,(VREGOF,VREG6),VREG6,VREG7 
          GEN    LIMP,(VREGOF,VREG6),VREG2,VREG6
          GEN    LOR,(VREGOF,VREG5),VREG6,VREG4 
          GEN    SSRAPB,VREG5,VREG2 
          RETURN
D         EJECT 
**        ND2NED -  SET T1 = TYPE OF SIGN 
* 
*         T1 = 001:  SOURCE HAS TRAILING OVERPUNCH SIGN 
*              010:  SOURCE HAS LEADING OVERPUNCH SIGN
*              011:  SOURCE HAS NO SIGN 
*              101:  SOURCE HAS TRAILING SEPARATE SIGN
*              110:  SOURCE HAS LEADING SEPARATE SIGN 
  
  
 ND2NED   LABEL 
  
          IFTHEN ((LDSIGNOF,REGB),EQ,0)          IF TRAILING SIGN 
           ANDIF ((SCHAROF,REGB),EQ,0)            AND OVERPUNCH SIGN
            MOVEZ  1,T1                            THEN CODE = 1
            ENDIFZ
  
          IFTHEN ((LDSIGNOF,REGB),EQ,0)          IF TRAILING SIGN 
           ANDIF ((SCHAROF,REGB),EQ,1)            AND SEPARATE SIGN 
            MOVEZ  5,T1                            THEN CODE = 5
            ENDIFZ
  
          IFTHEN ((LDSIGNOF,REGB),EQ,1)          IF LEADING SIGN
           ANDIF ((SCHAROF,REGB),EQ,0)            AND OVERPUNCH SIGN
            MOVEZ  2,T1                            THEN CODE = 2
            ENDIFZ
  
          IFTHEN ((LDSIGNOF,REGB),EQ,1)          IF LEADING SIGN
           ANDIF ((SCHAROF,REGB),EQ,1)            AND SEPARATE SIGN 
            MOVEZ  6,T1                            THEN CODE = 6
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,0)            IF SOURCE UNSIGNED 
            MOVEZ  3,T1                            THEN CODE = 3
            ENDIFZ
  
          RETURN
E         EJECT 
**        ND2NEE -  ZZZ CASE
* 
*         LOAD AND SCALE ND TO RN.
*         BLANK FILL VIA C.EDITZ. 
*         STORE VIA RN2ND.
  
  
 ND2NEE   EGO    4
          NOTE   ND2NEE 
          PUSH   P1                              SAVE MASK COUNT
  
*      CONVERT ND (IN REGB) TO RN (IN REGU2)
  
          MINZ   (INTLENOF,REGB),(NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  0,(POINTOF,REGU2)
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU2,REGC                      THIS DEST. IS REGU2
          CALLZ  ND2RN                           MOVE (REGB) TO (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      BLANK-FILL RN (IN REGU2) 
  
          NOTE   ND2NEE1
          POP    P1                              RESTORE MASK COUNT 
          GEN    MASK,(VREGOF,VREG1),P1 
          GENOBJ N=C.EDITZ,I=(VREG1,(TREGOF,REGU2)),O=((VREGOF,VREG3))
          MOVEZ  VREG3,(TREGOF,REGU2) 
  
*      CONVERT RN (IN REGU2) TO ND (IN REGC)
  
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU2,REGB                      THIS SOURCE IS REGU2 
          CALLZ  RN2ND                           MOVE (REGB) TO (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          RETURN
          SPACE  4
          LISTSEC  ND2RA
          TITLE  ND2RA -  NUMERIC DISPLAY ITEM TO REGISTER ALPHANUMERIC 
**        ND2RA -  NUMERIC DISPLAY ITEM TO REGISTER ALPHANUMERIC
* 
*         REGB = REGTABL INDEX TO SOURCE ITEM 
*         ((FWA$OF,REGB)) 
*         (WRDOFFOF,REGB) 
*         (BCPOF,REGB)
*         (NUMLENOF,REGB) 
*         (POINTOF,REGB) = 0
*         (LDSIGNOF,REGB) 
*         (SCHAROF,REGB)
*         REGC = REGTABL INDEX TO DESTINATION REGISTER
*         (BYTLENOF,REGC) \ (NUMLENOF,REGC) 
* 
*         CALLZ  ND2RA
* 
*         THE RESULT IS LEFT-JUSTIFIED, BLANK-FILLED WITHIN 
*           ONE OR TWO REGISTERS. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF THE 
*           (LEFT-MOST PART OF THE) RESULT. 
*         IF (BYTLENOF,REGC) > 10,  (TREGP1OF,REGC) = VIRTUAL REGISTER
*           NUMBER OF THE RIGHT-MOST PART OF THE RESULT.
*         IF THE SOURCE IS SIGNED,  THE SIGN WILL BE STRIPPED.
  
  
 ND2RA    EGO    2
          IFZ    ((SIGNOF,REGB),EQ,1),ND2RA1     IF SOURCE SIGNED 
  
  
*                            SOURCE IS UNSIGNED 
*                            TREAT SOURCE AS ALPHANUMERIC 
          NOTE   ND2RA
          CALLZ  AN2RA
          RETURN
  
  
*                            SOURCE IS SIGNED 
 ND2RA1   LABEL 
          IFZ    ((SCHAROF,REGB),EQ,0),ND2RA2    IF OVERPUNCH SIGN
  
*                            SOURCE HAS SEPARATE SIGN 
          NOTE   ND2RA1 
  
*      CREATE A NEW REGTABL ENTRY AND A PERMANENT DNAT
  
          MOVEZ  REGU1,REGT 
          CALLZ  ADPDNAT
          MOVEZ  (GPTROF,REGU1),T1               SAVE DNAT INDEX
  
*      COPY REGTABL ENTRY  (FOR SUBSCRIPTING) 
  
          MOVEZ  REGB,P1                         FROM 
          MOVEZ  REGU1,P2                        TO 
          EXECUTE CGREGMV 
  
*      SET UP NEW DNAT WITHOUT SIGN CHARACTER 
  
          MOVEZ  T1,(GPTROF,REGU1)               RESET INDEX TO NEW DNAT
          MOVEZ  ALPHNUM,(TYPEOF,REGU1) 
          MOVEZ  (NUMLENOF,REGB),(BYTLENOF,REGU1) 
          ADDZ   (BCPOF,REGB),(LDSIGNOF,REGB),(BCPOF,REGU1) 
          IFTHEN  ((BCPOF,REGU1),EQ,10) 
            ADDZ   (WRDOFFOF,REGB),1,(WRDOFFOF,REGU1) 
            MOVEZ  0,(BCPOF,REGU1)
          ELSEZ 
            MOVEZ  (WRDOFFOF,REGB),(WRDOFFOF,REGU1) 
            ENDIFZ
          MOVEZ  (MAJMSCOF,REGB),(MAJMSCOF,REGU1) 
          MOVEZ  (SUBMSCOF,REGB),(SUBMSCOF,REGU1) 
  
*      CALL AN2RA   (WHICH DOES NOT USE REGU1)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU1,REGB                      THIS SOURCE IS REGU1 
          CALLZ  AN2RA                           MOVE (REGB) TO (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  ND2RAA                          HANDLE POSSIBLE LBZ-OPT
          RETURN
  
  
*                            SOURCE HAS OVERPUNCH SIGN
 ND2RA2   LABEL 
          IFZ    ((BYTLENOF,REGC),GT,10),ND2RA3  IF 2-REGISTER DEST.
  
*                            SOURCE HAS OVERPUNCH SIGN
*                            1-REGISTER DESTINATION 
          NOTE   ND2RA2 
          CALLZ  AN2RA
  
          IFTHEN ((LDSIGNOF,REGB),EQ,1)          IF LEADING SIGN
            MOVEZ  1,T1 
          ELSEZ                                  IF TRAILING SIGN 
            MOVEZ  (NUMLENOF,REGB),T1 
            ENDIFZ
  
          GEN    SHL,(TREGOF,REGC),(ARITH8,T1)             6*T1 
          GEN    MASK,(VREGOF,VREG1),54 
          GEN    LIMP,(VREGOF,VREG1),(TREGOF,REGC),VREG1
          GEN    SLRXPK,(VREGOF,VREG1),VREG1,CBSTRP 
          GEN    SXXPB,(VREGOF,VREG1),VREG1 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGC),VREG1
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          CALLZ  ND2RAA                          HANDLE POSSIBLE LBZ-OPT
          RETURN
  
  
*                            SOURCE HAS OVERPUNCH SIGN
*                            2-REGISTER DESTINATION 
 ND2RA3   LABEL 
          IFZ    ((LDSIGNOF,REGB),EQ,1),ND2RA4   IF SIGN IN FIRST REG.
          IFZ    ((NUMLENOF,REGB),LE,10),ND2RA4  IF SIGN IN FIRST REG.
  
*                            SOURCE HAS OVERPUNCH SIGN
*                            2-REGISTER DESTINATION 
*                            SIGN IS IN SECOND REGISTER 
          NOTE   ND2RA3 
          CALLZ  AN2RA
          SUBZ   (NUMLENOF,REGB),10,T1
          GEN    SHL,(TREGP1OF,REGC),(ARITH8,T1)           6*T1 
          GEN    MASK,(VREGOF,VREG2),54 
          GEN    LIMP,(VREGOF,VREG2),(TREGP1OF,REGC),VREG2
          GEN    SLRXPK,(VREGOF,VREG2),VREG2,CBSTRP 
          GEN    SXXPB,(VREGOF,VREG2),VREG2 
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGC)         VREG1
          GEN    LXOR,(VREGOF,VREG2),(TREGP1OF,REGC),VREG2 VREG2=VREG1+1
          GEN    SHL,VREG2,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          CALLZ  ND2RAA                          HANDLE POSSIBLE LBZ-OPT
          RETURN
  
  
*                            SOURCE HAS OVERPUNCH SIGN
*                            2-REGISTER DESTINATION 
*                            SIGN IS IN FIRST REGISTER
 ND2RA4   LABEL 
          NOTE   ND2RA4 
          CALLZ  AN2RA
  
          IFTHEN ((LDSIGNOF,REGB),EQ,1)          IF LEADING SIGN
            MOVEZ  1,T1 
          ELSEZ                                  IF TRAILING SIGN 
            MOVEZ  (NUMLENOF,REGB),T1 
            ENDIFZ
  
          GEN    SHL,(TREGOF,REGC),(ARITH8,T1)             6*T1 
          GEN    MASK,(VREGOF,VREG1),54 
          GEN    LIMP,(VREGOF,VREG1),(TREGOF,REGC),VREG1
          GEN    SLRXPK,(VREGOF,VREG1),VREG1,CBSTRP 
          GEN    SXXPB,(VREGOF,VREG1),VREG1 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGC),VREG1
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          GEN    XMIT,(VREGOF,VREG2),(TREGP1OF,REGC)       VREG2=VREG1+1
          MOVEZ  VREG1,(TREGOF,REGC)
          CALLZ  ND2RAA                          HANDLE POSSIBLE LBZ-OPT
          RETURN
A         EJECT 
**        ND2RAA -  HANDLE *LEADING BLANKS = ZERO* CONTROL CARD OPTION
* 
*      GIVEN: 
*         (NUMLENOF,REGB) 
*         (TREGOF,REGC) 
*         (BYTLENOF,REGC) 
* 
*      DOES:  
*         IF THE *LBZ* CONTROL CARD OPTION WAS SPECIFIED, 
*         CONVERTS ANY LEADING BLANKS IN THE FIRST (NUMLENOF,REGB)
*         CHARACTERS OF THE SPECIFIED REGISTER(S) TO DISPLAY ZERO.
  
  
 ND2RAA   LABEL 
          IFZ    ((CCTBIT,LBZ),EQ,0),RETURN      IF NO *LBZ* OPTION 
          MOVEZ  (NUMLENOF,REGB),T2 
          IFZ    ((BYTLENOF,REGC),GT,10),ND2RAA2 IF 2-REG DESTINATION 
          IFZ    (T1,EQ,10),ND2RAA1              IF TO CONVERT FULL WORD
  
*                            1-REGISTER DESTINATION 
          NOTE   ND2RAA 
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG4),(TREGOF,REGC),VREG3
          GEN    LAND,(VREGOF,VREG1),(TREGOF,REGC),VREG3
          GENOBJ N=C.AOPTN,I=(VREG1),O=((VREGOF,VREG1)) 
          GEN    LOR,(VREGOF,VREG1),VREG1,VREG4 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
*                            1-REGISTER DESTINATION 
*                            CONVERTING FULL WORD 
 ND2RAA1  LABEL 
          NOTE   ND2RAA1
  
          GENOBJ N=C.AOPTN,I=((TREGOF,REGC)),O=((VREGOF,VREG1)) 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
 ND2RAA2  LABEL 
          IFZ    (T2,GT,10),ND2RAA4              IF TO CONVERT TWO WORDS
          IFZ    (T2,EQ,10),ND2RAA3              IF TO CONVERT FULL WORD
  
*                            2-REGISTER DESTINATION 
*                            CONVERT ONLY PART OF FIRST REGISTER
          NOTE   ND2RAA2
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG4),(TREGOF,REGC),VREG3
          GEN    LAND,(VREGOF,VREG1),(TREGOF,REGC),VREG3
          GENOBJ N=C.AOPTN,I=(VREG1),O=((VREGOF,VREG1)) 
          GEN    LOR,(VREGOF,VREG1),VREG1,VREG4            VREG1
          GEN    XMIT,(VREGOF,VREG2),(TREGP1OF,REGC)       VREG2=VREG1+1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
*                            2-REGISTER DESTINATION 
*                            CONVERT EXACTLY FIRST REGISTER 
 ND2RAA3  LABEL 
          NOTE   ND2RAA3
          GENOBJ N=C.AOPTN,I=((TREGOF,REGC)),O=((VREGOF,VREG1)) 
          GEN    XMIT,((VREGOF,VREG2)),(TREGP1OF,REGC)     VREG2=VREG1+1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
*                            2-REGISTER DESTINATION 
*                            CONVERT BOTH WORDS 
 ND2RAA4  LABEL 
          NOTE   ND2RAA4
          SUBZ   T1,10,T3 
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T3)           6*T3 
          GEN    LIMP,(VREGOF,VREG5),(TREGP1OF,REGC),VREG3
          GEN    LAND,(VREGOF,VREG1),(TREGP1OF,REGC),VREG3
          GENOBJ N=C.AOPTN,I=(VREG2),O=((VREGOF,VREG2)) 
          MOVEZ  (VREGOF,VREG1),VREG1                      VREG1
          GEN    LOR,(VREGOF,VREG2),VREG2,VREG5            VREG2=VREG1+1
          GENOBJ N=C.AOPTN,I=((TREGOF,REGC)),O=(VREG1)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
          SPACE  4
          LISTSEC  ND2R1
          TITLE  ND2R1 -  NUMERIC DISPLAY ITEM TO REGISTER COMP-1 
**        ND2R1 -  NUMERIC DISPLAY ITEM TO REGISTER COMP-1
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 99PPP _ -3)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOURCE HAS SEPARATE SIGN.
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION REGISTER. 
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  ND2R1
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           CONTAINING RESULT.
* 
*         USES-  REGU2
*                SAVREGB1 
*                SAVREGC2 
*                REGU1       (BY RN2R1) 
*                SAVREGC1    (BY RN2R1) 
  
  
 ND2R1    EGO    2
          NOTE   ND2R1
  
*      CREATE DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU2),REGT             REGU2 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
  
*      CONVERT ND (IN REGB) TO RN (IN REGU2)
  
          PUSH   REGC 
          MOVEZ  (EQUALS,REGU2),REGC             THIS DEST. IS REGU2
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CONVERT RN (IN REGU2) TO R1 (IN REGC)
  
          PUSH   REGB 
          MOVEZ  (EQUALS,REGU2),REGB             THIS SOURCE IS REGU2 
          CALLZ  RN2R1                           CONVERT (REGB) _ (REGC)
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
  
          RETURN
          SPACE  4
          LISTSEC  ND2R2
          TITLE  ND2R2 -  NUMERIC DISPLAY ITEM TO REGISTER COMP-2 
**        ND2R2 -  NUMBER IDSPLAY ITEM TO REGISTER COMP-2 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999PP _ -2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOUCE HAS SEPARATE SIGN. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  ND2R2
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           CONTAINING RESULT.
*         USES-  REGU3
*                SAVREGB1 
*                SAVREGC3 
*                REGU2       (BY RN2R2) 
*                REGU1       (BY RN2R2) 
*                SAVREGC1    (BY RN2R2) 
*                SAVREGC2    (BY RN2R2) 
  
  
 ND2R2    EGO    2
          NOTE   ND2R2
  
*      CREATE DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU3),REGT             REGU3 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU3) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU3) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU3) 
  
*      CONVERT ND (IN REGB) TO RN (IN REGU3)
  
          PUSH   REGC 
          MOVEZ  (EQUALS,REGU3),REGC             THIS DEST. IS REGU3
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CONVERT RN (IN REGU3) TO R2 (IN REGC)
  
          PUSH   REGB 
          MOVEZ  (EQUALS,REGU3),REGB             THIS SOURCE IS REGU3 
          CALLZ  RN2R2                           CONVERT (REGB) _ (REGC)
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
  
          RETURN
          LISTSEC  ND2R4
          TITLE  ND2R4 -  NUMERIC DISPLAY ITEM TO D.P. COMP-2 REGISTER
**        ND2R4 -  NUMERIC DISPLAY ITEM TO D.P. COMP-2 REGISTER 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 99V999 _ 3)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         (LDSIGNOF,REGB) = 1 IFF SOURCE HAS LEADING SIGN.
*         (SCHAROF,REGB) = 1 IFF SOURCE HAS SEPARATE SIGN.
*         REGC = DNAT POINTER TO DESTINATION REGISTERS. 
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  ND2R4
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           CONTAINING MOST SIGNIFICANT PART OF RESULT. 
*         (TREGP1OF,REGC) WILL CONTAIN VIRTUAL REGISTER NUMBER OF 
*           REGISTER CONTAINING LEAST SIGNIFICANT PART OF RESULT. 
* 
*         USES-  REGU4
*                SAVREGB1 
*                SAVREGC4 
*                REGU3       (BY RN2R4) 
*                REGU1       (BY RN2R4) 
*                SAVREGC3    (BY RN2R4) 
*                SAVREGC2    (BY RN2R4) 
*                SAVREGC1    (BY RN2R4) 
  
  
 ND2R4    EGO    2
          NOTE   ND2R4
  
*      CREATE DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU4),REGT             REGU4 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU4) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU4) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU4) 
  
*      CONVERT ND (IN REGB) TO RN (IN REGU4)
  
          PUSH   REGC 
          MOVEZ  REGU4,REGC                      THIS DEST. IS REGU4
          CALLZ  ND2RN                           CONVERT (REGB) _ (REGC)
          POP    REGC 
  
*      CONVERT RN (IN REGU4) TO R4 (IN REGC)
  
          PUSH   REGB 
          MOVEZ  (EQUALS,REGU4),REGB             THIS SOURCE IS REGU4 
          CALLZ  RN2R4                           CONVERT (REGB) _ (REGC)
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU4 DNAT
          RETURN
          SPACE  4
          LISTSEC  *
          END 
