/*****************************************************************************
*           Change Log
*  Date     | Change
*-----------+-----------------------------------------------------------------
* 13-Dec-85 | [1.183] Created
* 25-Feb-86 | [1.379] include <> => include ""
* 31-Jul-86 | [1.405] Made all chars unsigned
*****************************************************************************/
#include "boolean.h"
#include "stdio.h"
#include "mach.h"
#include "cvbytes.h"

/****************************************************************************
*                                   cvbytes
* Inputs:
*       unsigned char * dest: Place to put converted bytes
*	int val: Value to convert
* Effect: 
*       3 bcd characters representing the value are placed in dest[0..2]
****************************************************************************/

void cvbytes(unsigned char * dest,short val)
    {
     dest[2] = (unsigned char) (val % 10);	/* low order bcd char is units */
     if(dest[2] == '\0') dest[2] = 10;	/* 8-2 for 0 */

     dest[1] = (unsigned char) ((val / 10) % 10);
     if(dest[1] == '\0') dest[1] = 10;	/* 8-2 for 0 */

     dest[0] = (unsigned char) ((val / 100) % 10);
     if(dest[0] == '\0') dest[0] = 10;	/* 8-2 for 0 */

     /* That takes care of the easy stuff!  000..999 now stored */

     /* Now do decoding for 1000..3999	(A,B,AB = 1,2,3 on tens)
        and for 4000-15000		(A,B,AB = 1,2,3 * 4000 on units )
        and index registers

	range		hundreds	units
	 000-  999	-		-
	1000- 1999	A		-
	2000- 2999	B		-
	3000- 3999	AB		-
	4000- 4999	-		-
	5000- 5999	A		A
	6000- 6999	B		A
	7000- 7999	AB		A
	8000- 8999	-		-
	9000- 9999	A		B
       10000-10999	B		B
       11000-11999	AB		B
       12000-12999	-		-
       13000-13999	A		AB
       14000-14999	B		AB
       15000-15999	AB		AB
     */

     switch((val/1000) % 4)
        { /* hundreds zone */
	 case 0:  break;
	 case 1:  dest[0] |= A_bits;
	 	  break;
	 case 2:  dest[0] |= B_bits;
	 	  break;
	 case 3:  dest[0] |= BA_bits;
	 	  break;
	} /* hundreds zone */

     switch((val/4000) % 4)
        { /* units zone */
	 case 0:  break;
	 case 1:  dest[2] |= A_bits;
	 	  break;
	 case 2:  dest[2] |= B_bits;
	 	  break;
	 case 3:  dest[2] |= BA_bits;
	 	  break;
	} /* units zone */
    }
