// DATE 050621
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$C2D5
       MACRO
       $C2D5
.*
.*     5703-XM1 CONVERT 2 BYTE BIN VALUE TO A 5 BYTE DECIMAL NR.
.*
       TEXT
       TITLE 'C2DEC5 - CONVERT 2 BYTE BIN NR TO 5 BYTE DEC NR'
***********************************************************************
*FUNCTION -                                                           *
*   SERIALLY REUSABLE SUBROUTINE TO CONVERT A 2 BYTE BINARY VALUE TO  *
*   A 5 BYTE POSITIVE DECIMAL NUMBER.                                 *
*   ON ENTRY @XR POINTS TO THE LEFT BYTE OF THE BINARY VALUE.         *
*   ON RETURN C2DVAL IS THE RIGHT BYTE OF THE 5 BYTES DECIMAL VALUE   *
*   WITH LEADING ZEROS WHICH MAY BE MODIFIED BY THE USER IN ANY WAY   *
*   IN IT'S LOCATION.                                                 *
*   THE 2 BYTES BINARY VALUE IS NOT ALTERED.                          *
*   @XR IS NOT ALTERED.                                               *
*   @BR IS SAVED AND RESTORED AT EXIT.                                *
***********************************************************************
       SPACE 1
C2DEC5 EQU   *                         MODULE ENTRY POINT
       USING C2DEC5,@BR                BASE ADDRESS SPECIFICATION
       ST    C2D050+@OP1,@BR           SAVE @BR
       LA    C2DEC5,@BR                LOAD BASE REGISTER
       ST    C2D052+@OP1(,@BR),@ARR    SAVE RETURN ADDRESS
*
*      INITIALIZE DECIMAL INCREMENTER AND DECIMAL SUM TO 1 AND 0 RESP.
*
       ZAZ   C2D903(C2D903-C2D901,@BR),C2D901(C2D902-C2D901,@BR)
       MVI   C2D030+@D1(,@BR),@B1      INITIALIZE DISP TO BYTE 1
C2D020 MVI   C2D030+@Q(,@BR),@B1       INIT TEST TO BIT 7
*
C2D030 TBN   *-*(,@XR),*-*             TEST IF THIS BIT IS OFF
       JF    C2D040                    * BR AROUND SUM INCREMENT
*      INCREMENT DECIMAL SUM BY DECIMAL VALUE OF THIS TESTED BIT
       AZ    C2DVAL(C2D903-C2DVAL,@BR),C2D903(C2D903-C2DVAL,@BR)
*      DOUBLE DECIMAL VALUE OF INCREMENT TO VALUE OF NEXT BIT
C2D040 AZ    C2D903(C2D903-C2DVAL,@BR),C2D903(C2D903-C2DVAL,@BR)
       ALC   C2D030+@Q(1,@BR),C2D030+@Q(,@BR)  SHIFT BIT MASK LEFT ONE
       BNOL  C2D030(,@BR)              CONTINUE LOOP UNLESS ALL BITS
*                                      * TESTED
       SLC   C2D030+@D1(1,@BR),C2D020+@Q(,@BR)  DECR DISP TO BYTE 0
       BZ    C2D020(,@BR)              FALL THROUGH IF UNDERFLOW
C2D050 LA    *-*,@BR                   RESTORE @BR
C2D052 B     *-*                       RETURN TO CALLING PROGRAM
*
***    WORK AREA
*
C2D901 DC    DL1'1'                    INIT WORK AREA
C2D902 EQU   *                         FIST BYTE OF DECIMAL VALUE
C2DVAL DS    CL5                       5 BYTES DECIMAL VALUE
C2D903 DS    CL5                       DECIMAL INCREMENTER
***                END OF C4DEC5                                   ***
       MEND
// CEND
// END
*
// READER CONSOLE
