*COMDECK  COMCDXB            CONVERT DISPLAY CODE TO BINARY.             COMCDXB
 DXB      CTEXT  COMCDXB - CONVERT DISPLAY CODE TO BINARY.               COMCDXB
 DXB      SPACE  4,10                                                    COMCDXB
          IF     -DEF,QUAL$,1                                            COMCDXB
          QUAL   COMCDXB                                                 COMCDXB
          BASE   D                                                       COMCDXB
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCDXB
 DXB      SPACE  4,10                                                    COMCDXB
***       DXB - CONVERT DISPLAY CODE TO BINARY.                          COMCDXB
*                                                                        COMCDXB
*         G. R. MANSFIELD.   70/10/09.                                   COMCDXB
*         G. M. TOWNSEND.    77/05/25.                                   COMCDXB
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCDXB
*         DXB CONVERTS A STRING OF DECIMAL OR OCTAL DIGITS INTO          COMCDXB
*         INTERNAL INTEGER FORM.                                         COMCDXB
 DXB      SPACE  4,10                                                    COMCDXB
***       DXB CONVERTS A STRING OF DISPLAY CODE DIGITS CONTAINED WITHIN 
*         ONE WORD, LEFT-JUSTIFIED, ZERO-FILLED 
*         INTEGER VALUE.  CONVERSION ASSUMES EITHER BASE 8 OR 10 AS      COMCDXB
*         SPECIFIED IN THE CALL, BUT THIS IS OVERRIDDEN IF AN EXPLICIT   COMCDXB
*         *B* (OCTAL) OR *D* (DECIMAL) IS THE LAST CHARACTER.            COMCDXB
*                                                                        COMCDXB
*         THE ASSEMBLY OPTION *DXB1$* CONTROLS THE PROCESSING OF         COMCDXB
*         AN 8 OR 9 IN AN ASSUMED OCTAL VALUE WHERE NO EXPLICIT *B* OR   COMCDXB
*         *D* APPEARS.  IF *DXB1$* IS NOT DEFINED, THIS CASE IS TREATED  COMCDXB
*         AS AN ERROR;  IF *DXB1$* IS DEFINED, THE VALUE IS INTERPRETED  COMCDXB
*         AS DECIMAL.                                                    COMCDXB
*                                                                        COMCDXB
*         THE FOLLOWING ARE ALWAYS ERRORS -                              COMCDXB
*         (1.)  PRESENCE OF NON-DIGIT IN STRING, EXCEPT IN POST-RADIX.
*         (2.)  PRESENCE OF CHARACTER AFTER POST RADIX.                  COMCDXB
*         (3.)  PRESENCE OF 8 OR 9 WITH POST RADIX = B.                  COMCDXB
*                                                                        COMCDXB
*                                                                        COMCDXB
*         ENTRY  (X5) = WORD TO CONVERT.                                 COMCDXB
*                (B7) .GT. 0 IF DECIMAL BASE ASSUMED.                    COMCDXB
*                (B7) = 0 IF OCTAL BASE ASSUMED.                         COMCDXB
*                (B1) = 1.                                               COMCDXB
*                                                                        COMCDXB
*         EXIT   (X6) = CONVERTED DIGITS.                                COMCDXB
*                (X4) .NE. 0 IF ERROR IN ASSEMBLY.                       COMCDXB
*                                                                        COMCDXB
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.                             COMCDXB
*                B - 2, 3, 4, 5.                                         COMCDXB
*                A - NONE.                                               COMCDXB
*                                                                        COMCDXB
*         CALLS  NONE.                                                   COMCDXB
                                                                         COMCDXB
                                                                         COMCDXB
 DXB1     LX2    X7,B2       DECIMAL * 10                                COMCDXB
          IX7    X2+X7                                                   COMCDXB
          LX6    3           OCTAL * 8                                   COMCDXB
          BX2    -X3*X1      8/9 PRESENCE                                COMCDXB
          LX7    1                                                       COMCDXB
          BX6    X6+X1       OCTAL + NEW DIGIT                           COMCDXB
          IX7    X7+X1       DECIMAL + NEW DIGIT                         COMCDXB
          SB5    B5+X2       NOTE 8/9                                    COMCDXB
 DXB2     LX5    6           NEXT CHARACTER                              COMCDXB
          BX1    -X0*X5                                                  COMCDXB
          SB4    X1          CHECK CHARACTER                             COMCDXB
          LX2    X4,B4                                                   COMCDXB
          SX1    X1+B3       CONVERT CHARACTER                           COMCDXB
          BX5    X0*X5       CLEAR CHARACTER                             COMCDXB
          NG     X2,DXB1     LOOP IF DIGIT                               COMCDXB
                                                                         COMCDXB
*         CHECK FOR POST RADIX SPECIFICATION.                            COMCDXB
                                                                         COMCDXB
 DXB1$    IF     -DEF,DXB1$                                              COMCDXB
          SB3    B7          OCTAL/DECIMAL FLAG                          COMCDXB
          ZR     B4,DXB3     IF END OF ASSEMBLY                          COMCDXB
          SB3    B4-B2                                                   COMCDXB
          ZR     B3,DXB3     IF EXPLICIT *B*                             COMCDXB
          NE     B3,B2,DXBX  IF OTHER BUT NOT *D* (ERROR), RETURN        COMCDXB
 DXB3     NZ     X5,DXBX     IF MORE CHARACTERS (ERROR), RETURN          COMCDXB
          SX4    B5+         CLEAR ERROR FLAG UNLESS 8 OR 9 PRESENT      COMCDXB
          ZR     B3,DXBX     IF BASE = OCTAL, RETURN                     COMCDXB
          BX6    X7          SET DECIMAL                                 COMCDXB
          SX4    B0          CLEAR ERROR FLAG                            COMCDXB
 DXB1$    ELSE                                                           COMCDXB
          SB3    B5+B7       SET BASE (ASSUMED OR 8/9)                   COMCDXB
          ZR     B4,DXB3     IF END OF ASSEMBLY                          COMCDXB
          SB3    B4-B2
          NZ     X5,DXBX     IF NOT LAST CHARACTER, RETURN               COMCDXB
          EQ     B3,B2,DXB3  IF *D* 
          NZ     B3,DXBX     IF NOT *B* 
          NZ     B5,DXBX     IF 8/9 PRESENT.
          SB3    B0          SET OCTAL                                   COMCDXB
 DXB3     MX4    0           CLEAR ERROR                                 COMCDXB
          ZR     B3,DXBX     IF BASE = OCTAL, RETURN                     COMCDXB
          BX6    X7          SET DECIMAL                                 COMCDXB
 DXB1$    ENDIF                                                          COMCDXB
                                                                         COMCDXB
 DXB      SUBR               ENTRY/EXIT                                  COMCDXB
          SX4    7774B       MASK FOR (0123456789)                       COMCDXB
          MX0    -6          (X0) = CHARACTER MASK                       COMCDXB
          SX6    B0          CLEAR OCTAL                                 COMCDXB
          SB2    B1+B1       (B2) = 2                                    COMCDXB
          BX7    X7-X7       CLEAR DECIMAL                               COMCDXB
          SB3    -1R0        (B3) = CONVERSION CONSTANT                  COMCDXB
          SB5    6           TEST FIRST CHARACTER                        COMCDXB
          LX2    X5,B5                                                   COMCDXB
          BX3    -X0*X2                                                  COMCDXB
          ZR     X3,DXB3     IF ZERO WORD                                COMCDXB
          SX2    X3+B3                                                   COMCDXB
          LX4    21                                                      COMCDXB
          NG     X2,DXBX     IF FIRST CHARACTER ALPHABETIC, RETURN       COMCDXB
          SB5    B0+         CLEAR 8/9 PRESENT                           COMCDXB
          SX3    7           MASK FOR 8/9                                COMCDXB
          EQ     DXB2        ENTER CONVERSION LOOP                       COMCDXB
 DXB      SPACE  4,10                                                    COMCDXB
          BASE   *                                                       COMCDXB
 QUAL$    IF     -DEF,QUAL$                                              COMCDXB
          QUAL   *                                                       COMCDXB
 DXB      EQU    /COMCDXB/DXB                                            COMCDXB
 DXB=     EQU    /COMCDXB/DXB 
 QUAL$    ENDIF                                                          COMCDXB
 DXB      ENDX                                                           COMCDXB
