*DECK DB$CBIN 
          IDENT  DB$CBIN
          TITLE  DB$CBIN -- CONVERT FROM DISPLAY TO BINARY
          COMMENT  CONVERT DISPLAY TO BINARY
*#
* *   DB$CBIN -- CONVERT FROM DISPLAY TO BINARY  PAGE  1
* *   BOB MCALLESTER                             DATE  04/13/81 
* 
* DC  PURPOSE 
* 
*     CONVERT A NUMBER FROM TYPE CHARACTER TO TYPE INTEGER. 
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     FUNC DB$CBIN(DISPLAY,COUNT,BASE) I; 
* 
*     DISPLAY                DISPLAY CODED CHARACTERS FOR CONVERSION. 
*     COUNT                  NUMBER OF CHARACTERS.
*     BASE                   CONVERSION BASE (8 OR 10). 
* 
* DC  EXIT CONDITIONS 
* 
*     THE BINARY VALUE IS RETURNED. 
* 
*     ON INVALID INPUT, A -1 IS RETURNED. 
* 
* DC  CALLING ROUTINES
* 
*     THIS IS A UTILITY PROCEDURE THAT IS CALLED BY MANY ROUTINES.
* 
* DC  CALLED ROUTINES 
* 
*     DXB                    CONVERSION ROUTINE FROM COMMON DECK COMCDXB
* 
* DC  DESCRIPTION 
* 
*     THE DISPLAY CODED CHARACTER STRING MUST BE LEFT JUSTIFIED IN A
*     SINGLE WORD.
* 
*     THE CONTENTS OF THE WORD TO THE RIGHT OF THE 'COUNT' CHARACTERS 
*     IS INSIGNIFICANT BECAUSE THAT PART OF THE WORD IS MASKED OUT. 
* 
*     THE CHARACTER STRING MAY BE SHORTER THAN 'COUNT' CHARACTERS IF
*     ZERO FILL IS USED.
* 
*     A 'B' (OCTAL) OR 'D' (DECIMAL) MAY BE USED AS THE LAST CHARACTER
*     OF THE STRING TO EXPLICITLY OVERRIDE THE SPECIFIED BASE.
* 
*     ALL OTHER CHARACTERS WITHIN THE STRING MUST BE 0-7 IF OCTAL 
*     OR 0-9 IF DECIMAL.
* 
*     WHEN THERE IS INVALID INPUT A NEGATIVE VALUE IS RETURNED. 
*#
          SPACE  5,10 
          ENTRY  DB$CBIN
QUAL$     EQU    1
  
DB$CBIN   EQ     *+1S17      (X1) = LOCATION OF DISPLAY 
          SB1    1
          SA2    A1+B1       (X2) = LOCATION OF COUNT 
          SA3    A2+B1       (X3) = LOCATION OF BASE
          SA1    X1          (X1) = DISPLAY 
          SA2    X2          (X2) = COUNT 
          SA3    X3          (X3) = BASE
          IX4    X2+X2
          IX4    X4+X2
          LX4    1           (X4) = 6 * COUNT (BIT SIZE)
          SB2    X4-1 
          MX4    1
          AX4    B2          (X4) = BIT MASK
          BX5    X4*X1       (X5) = DISPLAY (TRAILING BLANKS ZEROED)
          SB7    X3-8        (B7) = 0 IF BASE IS OCTAL
  
*         DXB INTERFACES
* 
*         ENTRY  (X5) = DISPLAY WORD TO CONVERT.
*                       LEFT JUSTIFIED, BINARY ZERO FILL. 
*                (B7) = 0 IF OCTAL,  GREATER THAN ZERO IF DECIMAL.
*                (B1) = 1 
* 
*         EXIT   (X6) = BINARY VALUE
*                (X4) = NON-ZERO IF ERROR IN DISPLAY INPUT. 
  
          RJ     DXB
  
          ZR     X4,DB$CBIN  EXIT IF NO ERROR 
          SX6    -1 
          EQ     DB$CBIN
  
*         TO LIST THE COMMON DECK, INSERT A  'LIST  X' STATEMENT. 
  
*CALL COMCDXB 
  
          END 
