*DECK C$DTOI
          IDENT  C$DTOI 
          TITLE  CBDTOI - DOUBLE ** INTEGER 
  
          MACHINE  ANY,I
          COMMENT  DOUBLE ** INTEGER
 CBDTOI   SPACE  4
**        C.DTOI - DOUBLE ** INTEGER
* 
*         INPUT 
*                X1   BASE (UPPER HALF) 
*                X2   BASE (LOWER HALF) 
*                X3   EXPONENT
* 
*         OUTPUT
*                X5   RESULT (UPPER HALF) 
*                X0   RESULT (LOWER HALF) 
*                B3   ERROR FLAG
* 
*         SAVES 
*                B1 
* 
*         CALLS-
*                FORTRAN OBJECT LIBRARY ROUTINE *DTOI.* 
  
          ENTRY  C.DTOI 
 C.DTOI   DATA   0
          SB3    B0          ZERO ERROR FLAG
          ZR     X1,C.DTOI2 
          ZR     X3,C.DTOI1 
          RJ     =XDTOI.
          BX5    X6 
          BX0    X7 
          SB3    B0 
          SB1    1
          EQ     C.DTOI 
  
 C.DTOI1  SA5    =XC.FP1     X**0 = 1 
          MX0    0
          EQ     C.DTOI 
  
 C.DTOI2  NG     X3,C.DTOI3  0**(-X) UNDEFINED
          ZR     X3,C.DTOI3  0**0    UNDEFINED
          MX5    0           0**X = 0 
          MX0    0
          EQ     C.DTOI 
  
 C.DTOI3  SB3    B1          ERROR
          EQ     C.DTOI 
          TITLE  DTOI. - FORTRAN 5 DOUBLE ** INTEGER
**        DTOI. - FORTRAN 5 DOUBLE ** INTEGER 
* 
*         THIS ROUTINE RAISES A DOUBLE BASE TO AN INTEGER EXPONENT. 
*         NO ARGUMENT CHECKING IS PERFORMED.
* 
*         ENTRY  (X1) - UPPER PART OF BASE
*                (X2) - LOWER PART OF BASE
*                (X3) - INTEGER EXPONENT
*         EXIT   (X6) - UPPER PART OF RESULT
*                (X7) - LOWER PART OF RESULT
*         ALL B REGISTERS ASSUMED INTACT. 
  
  
*         COPYRIGHT CONTROL DATA CORP 1978,1979,1980,1981,1982
* 
*         CONTROL DATA PROPRIETARY PRODUCT
  
 DTOI1    AX5    1
          EQ     DTOI4
  
 DTOI.    DATA   0           ENTRY/EXIT WORD
          SX6    17204B      SET UPPER PART OF RESULT TO  1.0 
          BX7    X7-X7       SET LOWER PART TO ZERO 
          LX6    45          POSITION UPPER PART
          NZ     X3,DTOI5    IF EXPONENT 0... 
          NZ     X1,DTOI.    AND BASE IS NONZERO RETURN 1.D0
          SX6    1777B       BUT IF BASE IS ALSO ZERO,
          BX7    X7-X7       RETURN +INDEF
          LX6    48 
          EQ     DTOI.
  
 DTOI5    PL     X3,DTOI2    IF EXPONENT IS POSITIVE
          FX0    X6/X1       IF EXPON NEGATIVE THEN 
          BX3    -X3         SET EXPONENT + AND 
          FX4    X0*X1       SET  BASE  TO  1.0/BASE
          FX2    X0*X2
          FX5    X6-X4
          NX5    X5 
          DX4    X6-X4
          FX5    X4+X5
          DX4    X0*X1
          FX4    X5-X4
          FX4    X4-X2
          FX2    X4/X1
          FX1    X2+X0
          NX4    X1 
          DX2    X2+X0
          FX1    X4+X2
          DX2    X4+X2
  
 DTOI2    BX5    X3          CREATE  2ND  COPY  OF  EXPON 
          LX3    59 
          PL     X3,DTOI1    IF EXPONENT IS EVEN
  
 DTOI3    FX7    X1*X7       SET RESULT TO RESULT*BASE
          FX4    X6*X2
          FX0    X7+X4
          AX5    1           RIGHT SHIFT EXPON IN X5
          DX7    X1*X6
          FX4    X1*X6
          FX0    X7+X0
          FX6    X4+X0
          DX7    X4+X0
          ZR     X5,DTOI.    IF WE ARE DONE 
  
 DTOI4    FX2    X1*X2
          DX0    X1*X1       SET BASE TO BASE*BASE
          FX4    X2+X2
          LX3    59          RIGHT CIRCULAR SHIFT EXPON IN X3 
          FX2    X1*X1
          FX4    X0+X4
          FX1    X2+X4
          DX2    X2+X4
          NG     X3,DTOI3    IF THIS POWER OF BASE IS NEEDED
  
          AX5    1           RIGHT SHIFT EXPON IN X5
          EQ     DTOI4
          END 
