home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 228_01 / pacdec.c < prev    next >
Text File  |  1987-07-31  |  2KB  |  63 lines

  1. /*
  2. HEADER:         CUGXXX;
  3. TITLE:          Decimal string to packed decimal;
  4. DATE:           12-28-83;
  5. DESCRIPTION:    Converts integer (string) decimal number to packed decimal;
  6. KEYWORDS:       Packed decimals;
  7. FILENAME:       PACDEC.C;
  8. WARNINGS:       Decimal number must already be a string;
  9. AUTHORS:        Odis C. Wooten;
  10. COMPILER:       DeSmet C;
  11. REFERENCES:     US-DISK 1308;
  12. ENDREF
  13. */
  14.  
  15. /*     driver for pacdec    */
  16.  
  17. main()
  18. {
  19.     char toptr[11]  , fromptr[10] ;
  20.     int  ndigits , i,j;
  21. for (j=0;  j < 2000;  j +=10 )
  22.     {
  23.     for ( i = 0;   i < 11;     i++ )
  24.      toptr[i] = '\0' ;
  25.  
  26.     ndigits = itoa(j   , fromptr) ;
  27.     printf ( " j = %d  ndigits = %d   %s :", j,ndigits,fromptr);
  28.     toptr[9] = 0x0f ;
  29.     pacdec(fromptr, toptr, ndigits, 10, 1 ) ;
  30.     for ( i=0;  i<11;  i++ )
  31.           printf ( "%02x ",toptr[i] );
  32.     printf("\n\n\n");
  33.     }
  34. }
  35.  
  36.  
  37. #define  RIGHT 0
  38. #define  LEFT  1
  39. pacdec(fromptr, toptr, ndigits, topos, nibble)
  40. char *fromptr, *toptr ;
  41. int   ndigits, topos, nibble ;
  42. {
  43. fromptr += (ndigits-1);
  44. toptr    += (topos-1)  ;
  45.  
  46. while ( ndigits>0 )
  47.   {
  48.   printf("\nndigid=%d ",ndigits);
  49.      if ( nibble == RIGHT )
  50.     {      /*  pack right nibble */
  51.       *toptr = (*toptr & 0xf0)  |  (*fromptr-- & 0x0f)  ;
  52.       nibble = LEFT ;
  53.     }
  54.      else
  55.     {    /*  pack left nibble */
  56.       *toptr = (*toptr & 0x0f)  |  ( (*fromptr-- & 0x0f) << 4 ) ;
  57.       nibble = RIGHT ;
  58.       toptr--;
  59.     }
  60.      ndigits--;
  61.   }
  62. }
  63.