[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commits] r5731 - in /branches/libdfp/libc: ./ dfp/ dfp/libdecnumber/ dfp/libdecnumber/dpd/ dfp/sysdeps/dfp/ dfp/sysdeps/dfp/stdlib/ d...



Author: eberlein
Date: Mon Mar 31 15:12:46 2008
New Revision: 5731

Log:
2008-03-31  Pete Eberlein  <eberlein@xxxxxxxxxx>

	* libc/configure.in: Changed --enable-decimal-float option to use
	AC_ARG_ENABLE instead of AC_ARG_WITH.
	* libc/stdio-common/vfprintf.c: Fixed tabs on line continuations.
	* libc/dfp/Makeconfig: New file. Uses new sysd-rules-patterns
	variable.
	* libc/dfp/sysdeps/powerpc/numdigits.h: New file.
	* libc/dfp/sysdeps/powerpc/dpd-private.h: Removed tables.
	* libc/dfp/sysdeps/powerpc/dpd-private.c: Moved tables from 
	dpd-private.h to here.
	* libc/dfp/sysdeps/soft-dfp/extend_d_f.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/trunc.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/float.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/floatuns.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/fixuns.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/trunc2.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/convert.c: Removed unused variables.
	* libc/dfp/sysdeps/soft-dfp/fix.c: Deleted useless file.
	* libc/dfp/sysdeps/soft-dfp/extend.c: Deleted useless file.
	* libc/dfp/sysdeps/dfp/stdlib/strtod32.c: Made changes to handle
	zero with non-zero exponents.
	* libc/dfp/sysdeps/dfp/Versions: Added printf_dfphex. 
	* libc/dfp/sysdeps/dfp/printf_dfp.c: Rewritten to support draft
	TR24732 and no longer relies on decNumber.
	* libc/dfp/sysdeps/ieee754r/d32/frexpd32.c: Uses numdigits.h
	instead of decNumber.
	* libc/dfp/libdecnumber/decContextSymbols.h: Updated from GCC.
	* libc/dfp/libdecnumber/decNumberSymbols.h: Updated from GCC.
	* libc/dfp/libdecnumber/dpd/decimal32Symbols.h: Updated from GCC.
	* libc/dfp/libdecnumber/dpd/decimal64Symbols.h: Updated from GCC.
	* libc/dfp/libdecnumber/dpd/decimal128Symbols.h: Updated from GCC.
	* libc/dfp/Makefile: Removed decNumber from libc link.


Added:
    branches/libdfp/libc/dfp/Makeconfig
    branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.c
    branches/libdfp/libc/dfp/sysdeps/powerpc/numdigits.h
Removed:
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/extend.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/extend_d_f.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/fix.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/fixuns.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/float.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/floatuns.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/trunc.c
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/trunc2.c
Modified:
    branches/libdfp/libc/configure.in
    branches/libdfp/libc/dfp/Makefile
    branches/libdfp/libc/dfp/libdecnumber/decContextSymbols.h
    branches/libdfp/libc/dfp/libdecnumber/decNumberSymbols.h
    branches/libdfp/libc/dfp/libdecnumber/dpd/decimal128Symbols.h
    branches/libdfp/libc/dfp/libdecnumber/dpd/decimal32Symbols.h
    branches/libdfp/libc/dfp/libdecnumber/dpd/decimal64Symbols.h
    branches/libdfp/libc/dfp/sysdeps/dfp/Versions
    branches/libdfp/libc/dfp/sysdeps/dfp/printf_dfp.c
    branches/libdfp/libc/dfp/sysdeps/dfp/stdlib/strtod32.c
    branches/libdfp/libc/dfp/sysdeps/ieee754r/d32/frexpd32.c
    branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.h
    branches/libdfp/libc/dfp/sysdeps/soft-dfp/convert.c
    branches/libdfp/libc/stdio-common/vfprintf.c

Modified: branches/libdfp/libc/configure.in
==============================================================================
--- branches/libdfp/libc/configure.in (original)
+++ branches/libdfp/libc/configure.in Mon Mar 31 15:12:46 2008
@@ -254,11 +254,11 @@
 	      [])
 AC_SUBST(all_warnings)
 
-AC_ARG_WITH([decimal-float],
-	    AC_HELP_STRING([--decimal-float],
+AC_ARG_ENABLE([decimal-float],
+	    AC_HELP_STRING([--enable-decimal-float],
 			   [enable support for decimal floating point.]),
-	    [usedfp=$withval],
-	    [usedfp=yes])
+	    [usedfp=$enableval],
+	    [usedfp=no])
 if test "$usedfp" != no; then
 # Check to make sure the compiler supports decimal floating point.
 AC_CACHE_CHECK(for decimal-float-support in compiler,

Added: branches/libdfp/libc/dfp/Makeconfig
==============================================================================
--- branches/libdfp/libc/dfp/Makeconfig (added)
+++ branches/libdfp/libc/dfp/Makeconfig Mon Mar 31 15:12:46 2008
@@ -1,0 +1,2 @@
+sysd-rules-patterns += libc_%:%
+

Modified: branches/libdfp/libc/dfp/Makefile
==============================================================================
--- branches/libdfp/libc/dfp/Makefile (original)
+++ branches/libdfp/libc/dfp/Makefile Mon Mar 31 15:12:46 2008
@@ -15,13 +15,18 @@
 
 
 # Some symbols need to be in libdfp.so as well as libc.
-libdfp-shared = fmt_d32 fmt_d64 fmt_d128 dfptypeconv decode-decimal \
-	decNumber decimal32 decimal64 decimal128 decContext
+libdfp-shared = dfptypeconv decode-decimal \
+	dpd-private
+# \
+#	decNumber decimal32 decimal64 decimal128 decContext
 
 # The libdecnumber printing functions need to be in libc.so as well as
 # libdecnumber.
 #libdecnumber-shared = decNumber decimal32 decimal64 decimal128 decContext
 
+
+#sysd-rules-patterns += libc_%:%
+
 include ../Makeconfig
 
 # libDecNumber contains some functionality which isn't needed in libc.
@@ -30,6 +35,7 @@
 # These get added to libdfp.  Anything in $(libdfp-shared) gets
 # added to libc.so as well because they're the printf helpers.
 libdfp-routines := $(libdfp-shared) \
+	decNumber decimal32 decimal64 decimal128 decContext \
 	roundd32 roundd64 roundd128 \
 	lroundd32 lroundd64 lroundd128 \
 	llroundd32 llroundd64 llroundd128 \
@@ -110,8 +116,9 @@
 
 # Will only apply to those C files being built into libdfp
 ifeq ($(subdir), dfp)
-sysdep-CFLAGS += -D__STDC_WANT_DEC_FP__=1 -DIN_LIBDFP \
+sysdep-CFLAGS += -D__STDC_WANT_DEC_FP__=1 \
 	-I../dfp/libdecnumber -I../dfp/libdecnumber/dpd
+CFLAGS-printf_dfp.c += -O1 -fno-tree-ter
 endif
 
 ifneq ($(subdir), dfp)
@@ -198,6 +205,7 @@
 object-suffixes-left := $(all-object-suffixes)
 include $(o-iterator)
 
+
 # Required to get libdfp linked against the test cases.
 ifeq ($(build-shared),yes)
 $(addprefix $(objpfx),$(tests)): $(objpfx)libdfp.so$(libdfp.so-version)

Modified: branches/libdfp/libc/dfp/libdecnumber/decContextSymbols.h
==============================================================================
--- branches/libdfp/libc/dfp/libdecnumber/decContextSymbols.h (original)
+++ branches/libdfp/libc/dfp/libdecnumber/decContextSymbols.h Mon Mar 31 15:12:46 2008
@@ -19,7 +19,7 @@
 #define decContextZeroStatus __decContextZeroStatus
 #endif
 
-#ifdef IN_LIBDFP
+#ifdef __STDC_DEC_FP__
 #define decContextClearStatus ___decContextClearStatus
 #define decContextDefault ___decContextDefault
 #define decContextGetRounding ___decContextGetRounding

Modified: branches/libdfp/libc/dfp/libdecnumber/decNumberSymbols.h
==============================================================================
--- branches/libdfp/libc/dfp/libdecnumber/decNumberSymbols.h (original)
+++ branches/libdfp/libc/dfp/libdecnumber/decNumberSymbols.h Mon Mar 31 15:12:46 2008
@@ -66,7 +66,7 @@
 #define decNumberZero __decNumberZero
 #endif
 
-#ifdef IN_LIBDFP
+#ifdef __STDC_DEC_FP__
 #define decNumberAbs ___decNumberAbs
 #define decNumberAdd ___decNumberAdd
 #define decNumberAnd ___decNumberAnd

Modified: branches/libdfp/libc/dfp/libdecnumber/dpd/decimal128Symbols.h
==============================================================================
--- branches/libdfp/libc/dfp/libdecnumber/dpd/decimal128Symbols.h (original)
+++ branches/libdfp/libc/dfp/libdecnumber/dpd/decimal128Symbols.h Mon Mar 31 15:12:46 2008
@@ -13,7 +13,7 @@
 #define decimal128ToString __decimal128ToString
 #endif
 
-#ifdef IN_LIBDFP
+#ifdef __STDC_DEC_FP__
 #define decDigitsFromDPD ___decDigitsFromDPD
 #define decDigitsToDPD ___decDigitsToDPD
 #define decimal128Canonical ___decimal128Canonical

Modified: branches/libdfp/libc/dfp/libdecnumber/dpd/decimal32Symbols.h
==============================================================================
--- branches/libdfp/libc/dfp/libdecnumber/dpd/decimal32Symbols.h (original)
+++ branches/libdfp/libc/dfp/libdecnumber/dpd/decimal32Symbols.h Mon Mar 31 15:12:46 2008
@@ -13,7 +13,7 @@
 #define decimal32ToString __decimal32ToString
 #endif
 
-#ifdef IN_LIBDFP
+#ifdef __STDC_DEC_FP__
 #define decDigitsFromDPD ___decDigitsFromDPD
 #define decDigitsToDPD ___decDigitsToDPD
 #define decimal32Canonical ___decimal32Canonical

Modified: branches/libdfp/libc/dfp/libdecnumber/dpd/decimal64Symbols.h
==============================================================================
--- branches/libdfp/libc/dfp/libdecnumber/dpd/decimal64Symbols.h (original)
+++ branches/libdfp/libc/dfp/libdecnumber/dpd/decimal64Symbols.h Mon Mar 31 15:12:46 2008
@@ -13,7 +13,7 @@
 #define decimal64ToString __decimal64ToString
 #endif
 
-#ifdef IN_LIBDFP
+#ifdef __STDC_DEC_FP__
 #define decDigitsFromDPD ___decDigitsFromDPD
 #define decDigitsToDPD ___decDigitsToDPD
 #define decimal64Canonical ___decimal64Canonical

Modified: branches/libdfp/libc/dfp/sysdeps/dfp/Versions
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/dfp/Versions (original)
+++ branches/libdfp/libc/dfp/sysdeps/dfp/Versions Mon Mar 31 15:12:46 2008
@@ -2,5 +2,6 @@
   GLIBC_2.6 {
     # functions used in other libraries
     __printf_dfp;
+    __printf_dfphex;
   };
 }

Modified: branches/libdfp/libc/dfp/sysdeps/dfp/printf_dfp.c
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/dfp/printf_dfp.c (original)
+++ branches/libdfp/libc/dfp/sysdeps/dfp/printf_dfp.c Mon Mar 31 15:12:46 2008
@@ -30,9 +30,14 @@
 
 #include <fmt_dfp.h>
 
+extern void __get_dpd_digits (int, const void *const *, char*, int*, int*, int*,
+int*);
+
+
 /* This defines make it possible to use the same code for GNU C library and
    the GNU I/O library.	 */
 #define PUT(f, s, n) _IO_sputn (f, s, n)
+#define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : INTUSE(_IO_padn) (f, c, n))
 /* We use this file GNU C library and GNU I/O library.	So make
    names equal.	 */
 #undef putc
@@ -82,6 +87,20 @@
 	}								      \
     } while (0)
 
+#define PADN(ch, len)							      \
+  do									      \
+    {									      \
+      if (PAD (fp, ch, len) != len)					      \
+	{								      \
+	  if (buffer_malloced)						      \
+	    free (wbuffer);						      \
+	  return -1;							      \
+	}								      \
+      done += len;							      \
+    }									      \
+  while (0)
+
+
 #define DECIMAL_PRINTF_BUF_SIZE 65 /* ((DECIMAL128_PMAX + 14) * 2) + 1  */
 /* TODO: add wide character support */
 
@@ -90,9 +109,6 @@
 	      const struct printf_info *info,
 	      const void *const *args)
 {
-	char str[DECIMAL_PRINTF_BUF_SIZE];
-	const char *str_ptr = str;
-
 	int wide = info->wide;
 	wchar_t *wbuffer = NULL;
 	int buffer_malloced = 0;  /* PRINT macro uses this.  */
@@ -100,21 +116,304 @@
 	int done = 0;
 	int len = 0;
 
-	if (info->is_short) /* %H  */
-	  {
-	   __fmt_d32 (info, args, str, DECIMAL_PRINTF_BUF_SIZE);
-	  }
-	else if (info->is_long_double) /* %DD  */
-	  {
-	   __fmt_d128 (info, args, str, DECIMAL_PRINTF_BUF_SIZE);
-	  }
-	else /* %D  */
-	  {
-	   __fmt_d64 (info, args, str, DECIMAL_PRINTF_BUF_SIZE);
-	  }
-	len=strlen(str);
-	PRINT(str_ptr, wbuffer, len);
-
-	return 0;
+  /* Locale-dependent representation of decimal point.	*/
+  const char *decimal;
+  wchar_t decimalwc;
+  char spec = tolower(info->spec);
+
+  /* Locale-dependent thousands separator and grouping specification.  */
+  const char *thousands_sep = NULL;
+  wchar_t thousands_sepwc = 0;
+  const char *grouping;
+
+  
+#ifdef OPTION_EGLIBC_LOCALE_CODE
+  if (info->extra == 0)
+    {
+      decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+      decimalwc = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
+    }
+  else
+    {
+      decimal = _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
+      if (*decimal == '\0')
+	decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+      decimalwc = _NL_CURRENT_WORD (LC_MONETARY,
+				    _NL_MONETARY_DECIMAL_POINT_WC);
+      if (decimalwc == L'\0')
+	decimalwc = _NL_CURRENT_WORD (LC_NUMERIC,
+				      _NL_NUMERIC_DECIMAL_POINT_WC);
+    }
+  /* The decimal point character must not be zero.  */
+  assert (*decimal != '\0');
+  assert (decimalwc != L'\0');
+#else
+  /* Hard-code values from 'C' locale.  */
+  decimal = ".";
+  decimalwc = L'.';
+#endif
+
+
+#ifdef OPTION_EGLIBC_LOCALE_CODE
+  if (info->group)
+    {
+      if (info->extra == 0)
+	grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+      else
+	grouping = _NL_CURRENT (LC_MONETARY, MON_GROUPING);
+
+      if (*grouping <= 0 || *grouping == CHAR_MAX)
+	grouping = NULL;
+      else
+	{
+	  /* Figure out the thousands separator character.  */
+	  if (wide)
+	    {
+	      if (info->extra == 0)
+		thousands_sepwc =
+		  _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_THOUSANDS_SEP_WC);
+	      else
+		thousands_sepwc =
+		  _NL_CURRENT_WORD (LC_MONETARY,
+				    _NL_MONETARY_THOUSANDS_SEP_WC);
+	    }
+	  else
+	    {
+	      if (info->extra == 0)
+		thousands_sep = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+	      else
+		thousands_sep = _NL_CURRENT (LC_MONETARY, MON_THOUSANDS_SEP);
+	    }
+
+	  if ((wide && thousands_sepwc == L'\0')
+	      || (! wide && *thousands_sep == '\0'))
+	    grouping = NULL;
+	  else if (thousands_sepwc == L'\0')
+	    /* If we are printing multibyte characters and there is a
+	       multibyte representation for the thousands separator,
+	       we must ensure the wide character thousands separator
+	       is available, even if it is fake.  */
+	    thousands_sepwc = 0xfffffffe;
+	}
+    }
+  else
+    grouping = NULL;
+#else
+  grouping = NULL;
+#endif
+
+
+{
+    char digits[DECIMAL_PRINTF_BUF_SIZE];
+    int exp, /* the exponent */
+     is_neg, /* is negative */
+     is_nan, /* is not a number */
+     is_inf, /* is infinite */
+     sig,    /* number of significant digits */
+     width,  /* width of the field */
+     decpt,  /* decimal point offset into digits[] */
+     prec,   /* number of digits that follow the decimal point,
+                or number of significant digits for %g */
+     limit,  /* maximum offset into digits[], may exceed len */
+     n;      /* current digit offset into digits[] */
+    digits[0] = '0'; /* need an extra digit for rounding up */
+    
+//    __get_dpd_digits (
+//      (info->is_short) ?        32: /* %H */
+//      (info->is_long_double) ? 128: /* %DD */
+//                                64, /* %D */
+//	args, digits+1, &exp, &is_neg, &is_nan, &is_inf);
+
+    if (info->is_short)
+      __get_digits_d32 (*((_Decimal32*)args[0]), digits+1, &exp, &is_neg,
+			&is_nan, &is_inf);
+    else if (info->is_long_double)
+      __get_digits_d128 (*((_Decimal128*)args[0]), digits+1, &exp, &is_neg,
+			 &is_nan, &is_inf);
+    else
+      __get_digits_d64 (*((_Decimal64*)args[0]), digits+1, &exp, &is_neg,
+			&is_nan, &is_inf);
+
+    width = info->width;
+    prec = info->prec;
+    
+    if (is_nan || is_inf) {
+      width -= 3;
+      /*if (is_nan) is_neg = 0;*/
+      if (is_neg || info->showsign || info->space) width--;
+      
+      if (!info->left && width > 0)
+        PADN (' ', width);
+
+      if (is_neg)
+        outchar ('-');
+      else if (info->showsign)
+        outchar ('+');
+      else if (info->space)
+        outchar (' ');
+      
+      if (is_nan)
+        if (isupper(info->spec))
+	  { outchar ('N'); outchar ('A'); outchar ('N'); }
+	else
+	  { outchar ('n'); outchar ('a'); outchar ('n'); }
+      else
+        if (isupper(info->spec))
+	  { outchar ('I'); outchar ('N'); outchar ('F'); }
+	else
+	  { outchar ('i'); outchar ('n'); outchar ('f'); }
+	
+      if (info->left && width > 0)
+        PADN (' ', width);
+
+      return 0;
+    }
+    
+   
+    n = 0;
+    while (digits[n] == '0') n++;
+    sig = strlen(digits+n);
+    if (sig == 0) { sig = 1; n--; } /* coefficient is zero */
+    len = n + sig;
+    
+    
+    
+    /* if no precision is specified, use that of the decimal type */
+    if (prec < 0)
+      switch (spec)
+	{
+	  case 'f': prec = (exp < 0) ? -exp : 0; break;
+	  case 'g': prec = sig; break;
+	  case 'e': prec = sig-1; break;
+	}
+    else if (prec < ((spec == 'f') ? -exp : sig-(spec!='g')))
+    /* do rounding if precision is less than the decimal type */
+      {
+        int index;
+        index = n + prec;
+	if (spec == 'f') index += sig + exp;
+	if (spec == 'e') index += 1;
+	if (spec == 'g') index += 0;
+
+        if (index < len && digits[index] >= '5')
+          {
+            while (digits[--index] == '9') digits[index] = '0';
+            digits[index]++;
+            if (index < n) { n--; sig++; }
+          }
+      }
+    
+    /* calculate decimal point, adjust prec and exp if necessary */
+    switch(spec)
+      {
+	case 'f':
+	  decpt = n + sig + exp;
+	  break;
+
+	case 'g':
+	  if (0 >= exp && exp >= -(prec+5) && exp+sig <= prec)
+	    {
+	      spec = 'f';
+	      prec -= exp+sig;
+	      decpt = n + sig + exp;
+	      break;
+	    }
+	  /* fallthru to 'e' */
+	  prec--;
+
+	case 'e':
+	  exp += sig-1;
+	  decpt = n + 1;
+	  break;
+     }
+
+    /* remove trailing zeroes for %g */
+    /* temporarily disabled until we can figure out the draft
+    if (tolower (info->spec) == 'g')
+      {
+        while (prec > 0 && decpt+prec > len) prec--;
+	while (prec > 0 && digits[decpt+prec-1] == '0') prec--;
+      }*/
+
+    /* remove trailing zeroes for %g, but only if they are not significant */
+    if (tolower (info->spec) == 'g')
+      {
+        while (prec > 0 && decpt+prec > len) prec--;
+	while (prec > 0 && decpt+prec > n+sig && digits[decpt+prec-1] == '0') prec--;
+      }
+      
+
+    /* digits to the left of the decimal pt. */
+    if (n < decpt) width -= decpt - n;
+    else width--;  /* zero */
+  
+    /* digits to the right of the decimal pt. */
+    if (prec > 0) width -= 1 + prec;
+    else if (info->alt) width -= 1;
+  
+    if (spec != 'f')
+      width -= 4 + (0!=(exp/1000)) + (0!=(exp/100));
+  
+    if (is_neg || info->showsign || info->space) width--;
+
+    if (!info->left && info->pad != '0' && width > 0)
+      PADN (info->pad, width);
+
+    if (is_neg)
+      outchar ('-');
+    else if (info->showsign)
+      outchar ('+');
+    else if (info->space)
+      outchar (' ');
+
+    if (!info->left && info->pad == '0' && width > 0)
+      PADN ('0', width);
+
+
+  if (decpt <= n)
+    {
+      outchar ('0');
+      n = decpt;
+      if (n < 0)
+        {
+          outchar (wide ? decimalwc : *decimal);
+          while (n < 0 && n < decpt + prec)
+	    {
+              outchar ('0');
+              n++;
+            }
+        }
+    }
+  while (n < len && n < decpt + prec)
+    {
+      if (n == decpt) outchar (wide ? decimalwc : *decimal);
+      outchar (digits[n]);
+      n++;
+    }
+  while (n < decpt + prec)
+    {
+      if (n == decpt) outchar (wide ? decimalwc : *decimal);
+      outchar ('0');
+      n++;
+    }
+  if (n == decpt && info->alt) outchar (wide ? decimalwc : *decimal);
+  
+  
+  if (spec != 'f')
+   {
+     outchar (isupper(info->spec) ? 'E' : 'e');
+     if (exp < 0) { outchar ('-'); exp = -exp; } else outchar ('+');
+     n = exp;
+     if (exp >= 1000) { outchar ('0'+(n/1000)); n%=1000; }
+     if (exp >= 100) { outchar ('0'+(n/100)); n%=100; }
+     outchar ('0'+(n/10));
+     outchar ('0'+(n%10));
+ 
+   }
+  if (info->left && width > 0)
+    PADN (info->pad, width);
+}  
+
+   return 0;
 }
 libc_hidden_def (__printf_dfp)

Modified: branches/libdfp/libc/dfp/sysdeps/dfp/stdlib/strtod32.c
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/dfp/stdlib/strtod32.c (original)
+++ branches/libdfp/libc/dfp/sysdeps/dfp/stdlib/strtod32.c Mon Mar 31 15:12:46 2008
@@ -378,7 +378,8 @@
 #endif
       /* If TP is at the start of the digits, there was no correctly
 	 grouped prefix of the string; so no number found.  */
-      RETURN (FLOAT_ZERO, tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp);
+      RETURN (negative ? -FLOAT_ZERO : FLOAT_ZERO,
+              tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp);
     }
 
   /* Remember first significant digit and read following characters until the
@@ -434,7 +435,7 @@
 	  if (tp < startp)
 	    /* The number is validly grouped, but consists
 	       only of zeroes.  The whole value is zero.  */
-	    RETURN (FLOAT_ZERO, tp);
+	    RETURN (negative ? -FLOAT_ZERO : FLOAT_ZERO, tp);
 
 	  /* Recompute DIG_NO so we won't read more digits than
 	     are properly grouped.  */
@@ -559,12 +560,17 @@
 	cp = expp;
     }
 
+
+      printf("lead_zero=%d dig_no=%d int_no=%d exponent=%d\n", 
+              lead_zero, dig_no, int_no, exponent);
+
   /* We don't want to have to work with trailing zeroes after the radix.  */
   if (dig_no > int_no)
     {
       while (expp[-1] == L_('0'))
 	{
 	  --expp;
+	  --exponent;
 	  --dig_no;
 	}
       assert (dig_no >= int_no);
@@ -593,7 +599,25 @@
     *endptr = (STRING_TYPE *) cp;
 
   if (dig_no == 0)
-    return negative ? -FLOAT_ZERO : FLOAT_ZERO;
+    {
+      printf("lead_zero=%d dig_no=%d int_no=%d exponent=%d\n", 
+              lead_zero, dig_no, int_no, exponent);
+
+
+      if (exponent != 0)
+        return negative ? -FLOAT_ZERO : FLOAT_ZERO;
+
+
+      d32 += 1;
+      while(exponent-- > 0)
+	d32 *= 10;
+      while(++exponent < 0)
+	d32 /= 10;
+
+      d32 -= d32;
+      return negative ? -d32 : d32;
+    }
+
 
   if (lead_zero)
     {

Modified: branches/libdfp/libc/dfp/sysdeps/ieee754r/d32/frexpd32.c
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/ieee754r/d32/frexpd32.c (original)
+++ branches/libdfp/libc/dfp/sysdeps/ieee754r/d32/frexpd32.c Mon Mar 31 15:12:46 2008
@@ -33,12 +33,28 @@
 #define FUNCTION_NAME frexp
 
 #include <dfpmacro.h>
+#include <numdigits.h>
 
 DEC_TYPE
 INTERNAL_FUNCTION_NAME (DEC_TYPE x, int *y)
 {
   DEC_TYPE result;
-  decNumber dn_x;
+  int digits, exponent;
+ 
+  if (isinf(x) || isnan(x))
+    return x+x;
+  
+  digits = numdigits(x);
+  exponent = getexp(x);
+  *y = digits + exponent;
+
+  result = x;
+  setexp(&result, -digits);
+
+  return result;
+  
+/* old decnumber implementation */  
+/*  decNumber dn_x;
   decContext context;
 
   *y = 0;
@@ -52,7 +68,8 @@
 
   ___decContextDefault(&context, DEFAULT_CONTEXT);
   FUNC_CONVERT_FROM_DN (&dn_x, &result, &context);
-  return result;
+  
+  return result;*/
 }
 
 weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME)

Added: branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.c
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.c (added)
+++ branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.c Mon Mar 31 15:12:46 2008
@@ -1,0 +1,820 @@
+/* Data types for DPD format output.
+
+   Copyright (C) 2006, 2007, 2008 IBM Corporation.
+   Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
+
+   The Decimal Floating Point C Library is free software; you can
+   redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License version 2.1.
+
+   The Decimal Floating Point C Library is distributed in the hope that
+   it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+   the GNU Lesser General Public License version 2.1 for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License version 2.1 along with the Decimal Floating Point C Library;
+   if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+   Suite 330, Boston, MA 02111-1307 USA.
+
+   Please see dfp/COPYING.txt for more information.  */
+
+#include <float.h>
+#include <math.h>
+#include <fenv.h>
+#include <string.h>
+
+#include "dpd-private.h"
+
+const struct ieee754r_c_field c_decoder[32] = {
+	{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3},	/* 00000-00011 */
+	{0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7},	/* 00100-00111 */
+	{0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3},	/* 01000-01011 */
+	{0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7},	/* 01100-01111 */
+	{0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3},	/* 10000-10011 */
+	{0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7},	/* 10100-10111 */
+	{0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9},	/* 11000-11011 */
+	{0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0}	/* 11100-11111 */
+	};
+
+/* Table to encode the "left most" 2 bits of the biased exponent and the
+   "Left Most Digit" into the "C"ombination field.  Indexed by [lmd,lm2bits].  */
+const unsigned char lm2lmd_to_c[10][3] = {
+    {0x00, 0x08, 0x10}, 
+    {0x01, 0x09, 0x11},
+    {0x02, 0x0a, 0x12},
+    {0x03, 0x0b, 0x13},
+    {0x04, 0x0c, 0x14},
+    {0x05, 0x0d, 0x15},
+    {0x06, 0x0e, 0x16},
+    {0x07, 0x0f, 0x17},
+    {0x18, 0x1a, 0x1c},
+    {0x19, 0x1b, 0x1d}};  
+
+/* Table to convert 3 Densely Packed Decimal digits (10-bits) into
+   3 ASCII digits (24-bits, 3 bytes).  */
+const char	dpd_to_char[1024][4] = {
+	"000", "001", "002", "003", "004", "005", "006", "007", /* 000-007 */
+	"008", "009", "080", "081", "800", "801", "880", "881", /* 008-00f */
+	"010", "011", "012", "013", "014", "015", "016", "017", /* 010-017 */
+	"018", "019", "090", "091", "810", "811", "890", "891", /* 018-01f */
+	"020", "021", "022", "023", "024", "025", "026", "027", /* 020-027 */
+	"028", "029", "082", "083", "820", "821", "808", "809", /* 028-02f */
+	"030", "031", "032", "033", "034", "035", "036", "037", /* 030-037 */
+	"038", "039", "092", "093", "830", "831", "818", "819", /* 038-03f */
+
+	"040", "041", "042", "043", "044", "045", "046", "047", /* 040-047 */
+	"048", "049", "084", "085", "840", "841", "088", "089", /* 048-04f */
+	"050", "051", "052", "053", "054", "055", "056", "057", /* 050-057 */
+	"058", "059", "094", "095", "850", "851", "098", "099", /* 058-05f */
+	"060", "061", "062", "063", "064", "065", "066", "067", /* 060-067 */
+	"068", "069", "086", "087", "860", "861", "888", "889", /* 068-06f */
+	"070", "071", "072", "073", "074", "075", "076", "077", /* 070-077 */
+	"078", "079", "096", "097", "870", "871", "898", "899", /* 078-07f */
+
+	"100", "101", "102", "103", "104", "105", "106", "107", /* 080-087 */
+	"108", "109", "180", "181", "900", "901", "980", "981", /* 088-08f */
+	"110", "111", "112", "113", "114", "115", "116", "117", /* 090-097 */
+	"118", "119", "190", "191", "910", "911", "990", "991", /* 098-09f */
+	"120", "121", "122", "123", "124", "125", "126", "127", /* 0a0-0a7 */
+	"128", "129", "182", "183", "920", "921", "908", "909", /* 0a8-0af */
+	"130", "131", "132", "133", "134", "135", "136", "137", /* 0b0-0b7 */
+	"138", "139", "192", "193", "930", "931", "918", "919", /* 0b8-0bf */
+
+	"140", "141", "142", "143", "144", "145", "146", "147", /* 0c0-0c7 */
+	"148", "149", "184", "185", "940", "941", "188", "189", /* 0c8-0cf */
+	"150", "151", "152", "153", "154", "155", "156", "157", /* 0d0-0d7 */
+	"158", "159", "194", "195", "950", "951", "198", "199", /* 0d8-0df */
+	"160", "161", "162", "163", "164", "165", "166", "167", /* 0e0-0e7 */
+	"168", "169", "186", "187", "960", "961", "988", "989", /* 0e8-0ef */
+	"170", "171", "172", "173", "174", "175", "176", "177", /* 0f0-0f7 */
+	"178", "179", "196", "197", "970", "971", "998", "999", /* 0f8-0ff */
+
+	"200", "201", "202", "203", "204", "205", "206", "207", /* 100-107 */
+	"208", "209", "280", "281", "802", "803", "882", "883", /* 108-10f */
+	"210", "211", "212", "213", "214", "215", "216", "217", /* 110-117 */
+	"218", "219", "290", "291", "812", "813", "892", "893", /* 118-11f */
+	"220", "221", "222", "223", "224", "225", "226", "227", /* 120-127 */
+	"228", "229", "282", "283", "822", "823", "828", "829", /* 128-12f */
+	"230", "231", "232", "233", "234", "235", "236", "237", /* 130-137 */
+	"238", "239", "292", "293", "832", "833", "838", "839", /* 138-13f */
+
+	"240", "241", "242", "243", "244", "245", "246", "247", /* 140-147 */
+	"248", "249", "284", "285", "842", "843", "288", "289", /* 148-14f */
+	"250", "251", "252", "253", "254", "255", "256", "257", /* 150-157 */
+	"258", "259", "294", "295", "852", "853", "298", "299", /* 158-15f */
+	"260", "261", "262", "263", "264", "265", "266", "267", /* 160-167 */
+	"268", "269", "286", "287", "862", "863", "888", "889", /* 168-16f */
+	"270", "271", "272", "273", "274", "275", "276", "277", /* 170-177 */
+	"278", "279", "296", "297", "872", "873", "898", "899", /* 178-17f */
+
+	"300", "301", "302", "303", "304", "305", "306", "307", /* 180-187 */
+	"308", "309", "380", "381", "902", "903", "982", "983", /* 188-18f */
+	"310", "311", "312", "313", "314", "315", "316", "317", /* 190-197 */
+	"318", "319", "390", "391", "912", "913", "992", "993", /* 198-19f */
+	"320", "321", "322", "323", "324", "325", "326", "327", /* 1a0-1a7 */
+	"328", "329", "382", "383", "922", "923", "928", "929", /* 1a8-1af */
+	"330", "331", "332", "333", "334", "335", "336", "337", /* 1b0-1b7 */
+	"338", "339", "392", "393", "932", "933", "938", "939", /* 1b8-1bf */
+
+	"340", "341", "342", "343", "344", "345", "346", "347", /* 1c0-1c7 */
+	"348", "349", "384", "385", "942", "943", "388", "389", /* 1c8-1cf */
+	"350", "351", "352", "353", "354", "355", "356", "357", /* 1d0-1d7 */
+	"358", "359", "394", "395", "952", "953", "398", "399", /* 1d8-1df */
+	"360", "361", "362", "363", "364", "365", "366", "367", /* 1e0-1e7 */
+	"368", "369", "386", "387", "962", "963", "988", "989", /* 1e8-1ef */
+	"370", "371", "372", "373", "374", "375", "376", "377", /* 1f0-1f7 */
+	"378", "379", "396", "397", "972", "973", "998", "999", /* 1f8-1ff */
+
+	"400", "401", "402", "403", "404", "405", "406", "407", /* 200-207 */
+	"408", "409", "480", "481", "804", "805", "884", "885", /* 208-20f */
+	"410", "411", "412", "413", "414", "415", "416", "417", /* 210-217 */
+	"418", "419", "490", "491", "814", "815", "894", "895", /* 218-21f */
+	"420", "421", "422", "423", "424", "425", "426", "427", /* 220-227 */
+	"428", "429", "482", "483", "824", "825", "848", "849", /* 228-22f */
+	"430", "431", "432", "433", "434", "435", "436", "437", /* 230-237 */
+	"438", "439", "492", "493", "834", "835", "858", "859", /* 238-23f */
+
+	"440", "441", "442", "443", "444", "445", "446", "447", /* 240-247 */
+	"448", "449", "484", "485", "844", "845", "488", "489", /* 248-24f */
+	"450", "451", "452", "453", "454", "455", "456", "457", /* 250-257 */
+	"458", "459", "494", "495", "854", "855", "498", "499", /* 258-25f */
+	"460", "461", "462", "463", "464", "465", "466", "467", /* 260-267 */
+	"468", "469", "486", "487", "864", "865", "888", "889", /* 268-26f */
+	"470", "471", "472", "473", "474", "475", "476", "477", /* 270-277 */
+	"478", "479", "496", "497", "874", "875", "898", "899", /* 278-27f */
+
+	"500", "501", "502", "503", "504", "505", "506", "507", /* 280-287 */
+	"508", "509", "580", "581", "904", "905", "984", "985", /* 288-28f */
+	"510", "511", "512", "513", "514", "515", "516", "517", /* 290-297 */
+	"518", "519", "590", "591", "914", "915", "994", "995", /* 298-29f */
+	"520", "521", "522", "523", "524", "525", "526", "527", /* 2a0-2a7 */
+	"528", "529", "582", "583", "924", "925", "948", "949", /* 2a8-2af */
+	"530", "531", "532", "533", "534", "535", "536", "537", /* 2b0-2b7 */
+	"538", "539", "592", "593", "934", "935", "958", "959", /* 2b8-2bf */
+
+	"540", "541", "542", "543", "544", "545", "546", "547", /* 2c0-2c7 */
+	"548", "549", "584", "585", "944", "945", "588", "589", /* 2c8-2cf */
+	"550", "551", "552", "553", "554", "555", "556", "557", /* 2d0-2d7 */
+	"558", "559", "594", "595", "954", "955", "598", "599", /* 2d8-2df */
+	"560", "561", "562", "563", "564", "565", "566", "567", /* 2e0-2e7 */
+	"568", "569", "586", "587", "964", "965", "988", "989", /* 2e8-2ef */
+	"570", "571", "572", "573", "574", "575", "576", "577", /* 2f0-2f7 */
+	"578", "579", "596", "597", "974", "975", "998", "999", /* 2f8-2ff */
+
+	"600", "601", "602", "603", "604", "605", "606", "607", /* 300-307 */
+	"608", "609", "680", "681", "806", "807", "886", "887", /* 308-30f */
+	"610", "611", "612", "613", "614", "615", "616", "617", /* 310-317 */
+	"618", "619", "690", "691", "816", "817", "896", "897", /* 318-31f */
+	"620", "621", "622", "623", "624", "625", "626", "627", /* 320-327 */
+	"628", "629", "682", "683", "826", "827", "868", "869", /* 328-32f */
+	"630", "631", "632", "633", "634", "635", "636", "637", /* 330-337 */
+	"638", "639", "692", "693", "836", "837", "878", "879", /* 338-33f */
+
+	"640", "641", "642", "643", "644", "645", "646", "647", /* 340-347 */
+	"648", "649", "684", "685", "846", "847", "688", "689", /* 348-34f */
+	"650", "651", "652", "653", "654", "655", "656", "657", /* 350-357 */
+	"658", "659", "694", "695", "856", "857", "698", "699", /* 358-35f */
+	"660", "661", "662", "663", "664", "665", "666", "667", /* 360-367 */
+	"668", "669", "686", "687", "866", "867", "888", "889", /* 368-36f */
+	"670", "671", "672", "673", "674", "675", "676", "677", /* 370-377 */
+	"678", "679", "696", "697", "876", "877", "898", "899", /* 378-37f */
+
+	"700", "701", "702", "703", "704", "705", "706", "707", /* 380-387 */
+	"708", "709", "780", "781", "906", "907", "986", "987", /* 388-38f */
+	"710", "711", "712", "713", "714", "715", "716", "717", /* 390-397 */
+	"718", "719", "790", "791", "916", "917", "996", "997", /* 398-39f */
+	"720", "721", "722", "723", "724", "725", "726", "727", /* 3a0-3a7 */
+	"728", "729", "782", "783", "926", "927", "968", "969", /* 3a8-3af */
+	"730", "731", "732", "733", "734", "735", "736", "737", /* 3b0-3b7 */
+	"738", "739", "792", "793", "936", "937", "978", "979", /* 3b8-3bf */
+
+	"740", "741", "742", "743", "744", "745", "746", "747", /* 3c0-3c7 */
+	"748", "749", "784", "785", "946", "947", "788", "789", /* 3c8-3cf */
+	"750", "751", "752", "753", "754", "755", "756", "757", /* 3d0-3d7 */
+	"758", "759", "794", "795", "956", "957", "798", "799", /* 3d8-3df */
+	"760", "761", "762", "763", "764", "765", "766", "767", /* 3e0-3e7 */
+	"768", "769", "786", "787", "966", "967", "988", "989", /* 3e8-3ef */
+	"770", "771", "772", "773", "974", "775", "776", "777", /* 3f0-3f7 */
+	"778", "779", "796", "797", "976", "977", "998", "999"  /* 3f8-3ff */
+	};
+
+/* Table to convert 3 Densely Packed Decimal digits (10-bits) into
+   3 Binary coded Decimal digits (12-bits).  */
+const short int	dpd_to_bcd[1024] = {
+	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
+	0x008, 0x009, 0x080, 0x081, 0x800, 0x801, 0x880, 0x881, /* 008-00f */
+	0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
+	0x018, 0x019, 0x090, 0x091, 0x810, 0x811, 0x890, 0x891, /* 018-01f */
+	0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
+	0x028, 0x029, 0x082, 0x083, 0x820, 0x821, 0x808, 0x809, /* 028-02f */
+	0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
+	0x038, 0x039, 0x092, 0x093, 0x830, 0x831, 0x818, 0x819, /* 038-03f */
+
+	0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
+	0x048, 0x049, 0x084, 0x085, 0x840, 0x841, 0x088, 0x089, /* 048-04f */
+	0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
+	0x058, 0x059, 0x094, 0x095, 0x850, 0x851, 0x098, 0x099, /* 058-05f */
+	0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
+	0x068, 0x069, 0x086, 0x087, 0x860, 0x861, 0x888, 0x889, /* 068-06f */
+	0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
+	0x078, 0x079, 0x096, 0x097, 0x870, 0x871, 0x898, 0x899, /* 078-07f */
+
+	0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 080-087 */
+	0x108, 0x109, 0x180, 0x181, 0x900, 0x901, 0x980, 0x981, /* 088-08f */
+	0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 090-097 */
+	0x118, 0x119, 0x190, 0x191, 0x910, 0x911, 0x990, 0x991, /* 098-09f */
+	0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 0a0-0a7 */
+	0x128, 0x129, 0x182, 0x183, 0x920, 0x921, 0x908, 0x909, /* 0a8-0af */
+	0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 0b0-0b7 */
+	0x138, 0x139, 0x192, 0x193, 0x930, 0x931, 0x918, 0x919, /* 0b8-0bf */
+
+	0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 0c0-0c7 */
+	0x148, 0x149, 0x184, 0x185, 0x940, 0x941, 0x188, 0x189, /* 0c8-0cf */
+	0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 0d0-0d7 */
+	0x158, 0x159, 0x194, 0x195, 0x950, 0x951, 0x198, 0x199, /* 0d8-0df */
+	0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 0e0-0e7 */
+	0x168, 0x169, 0x186, 0x187, 0x960, 0x961, 0x988, 0x989, /* 0e8-0ef */
+	0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 0f0-0f7 */
+	0x178, 0x179, 0x196, 0x197, 0x970, 0x971, 0x998, 0x999, /* 0f8-0ff */
+
+	0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 100-107 */
+	0x208, 0x209, 0x280, 0x281, 0x802, 0x803, 0x882, 0x883, /* 108-10f */
+	0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 110-117 */
+	0x218, 0x219, 0x290, 0x291, 0x812, 0x813, 0x892, 0x893, /* 118-11f */
+	0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 120-127 */
+	0x228, 0x229, 0x282, 0x283, 0x822, 0x823, 0x828, 0x829, /* 128-12f */
+	0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 130-137 */
+	0x238, 0x239, 0x292, 0x293, 0x832, 0x833, 0x838, 0x839, /* 138-13f */
+
+	0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 140-147 */
+	0x248, 0x249, 0x284, 0x285, 0x842, 0x843, 0x288, 0x289, /* 148-14f */
+	0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 150-157 */
+	0x258, 0x259, 0x294, 0x295, 0x852, 0x853, 0x298, 0x299, /* 158-15f */
+	0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 160-167 */
+	0x268, 0x269, 0x286, 0x287, 0x862, 0x863, 0x888, 0x889, /* 168-16f */
+	0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 170-177 */
+	0x278, 0x279, 0x296, 0x297, 0x872, 0x873, 0x898, 0x899, /* 178-17f */
+
+	0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 180-187 */
+	0x308, 0x309, 0x380, 0x381, 0x902, 0x903, 0x982, 0x983, /* 188-18f */
+	0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 190-197 */
+	0x318, 0x319, 0x390, 0x391, 0x912, 0x913, 0x992, 0x993, /* 198-19f */
+	0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 1a0-1a7 */
+	0x328, 0x329, 0x382, 0x383, 0x922, 0x923, 0x928, 0x929, /* 1a8-1af */
+	0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 1b0-1b7 */
+	0x338, 0x339, 0x392, 0x393, 0x932, 0x933, 0x938, 0x939, /* 1b8-1bf */
+
+	0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 1c0-1c7 */
+	0x348, 0x349, 0x384, 0x385, 0x942, 0x943, 0x388, 0x389, /* 1c8-1cf */
+	0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 1d0-1d7 */
+	0x358, 0x359, 0x394, 0x395, 0x952, 0x953, 0x398, 0x399, /* 1d8-1df */
+	0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 1e0-1e7 */
+	0x368, 0x369, 0x386, 0x387, 0x962, 0x963, 0x988, 0x989, /* 1e8-1ef */
+	0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 1f0-1f7 */
+	0x378, 0x379, 0x396, 0x397, 0x972, 0x973, 0x998, 0x999, /* 1f8-1ff */
+
+	0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, /* 200-207 */
+	0x408, 0x409, 0x480, 0x481, 0x804, 0x805, 0x884, 0x885, /* 208-20f */
+	0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, /* 210-217 */
+	0x418, 0x419, 0x490, 0x491, 0x814, 0x815, 0x894, 0x895, /* 218-21f */
+	0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, /* 220-227 */
+	0x428, 0x429, 0x482, 0x483, 0x824, 0x825, 0x848, 0x849, /* 228-22f */
+	0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, /* 230-237 */
+	0x438, 0x439, 0x492, 0x493, 0x834, 0x835, 0x858, 0x859, /* 238-23f */
+
+	0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, /* 240-247 */
+	0x448, 0x449, 0x484, 0x485, 0x844, 0x845, 0x488, 0x489, /* 248-24f */
+	0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, /* 250-257 */
+	0x458, 0x459, 0x494, 0x495, 0x854, 0x855, 0x498, 0x499, /* 258-25f */
+	0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, /* 260-267 */
+	0x468, 0x469, 0x486, 0x487, 0x864, 0x865, 0x888, 0x889, /* 268-26f */
+	0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, /* 270-277 */
+	0x478, 0x479, 0x496, 0x497, 0x874, 0x875, 0x898, 0x899, /* 278-27f */
+
+	0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, /* 280-287 */
+	0x508, 0x509, 0x580, 0x581, 0x904, 0x905, 0x984, 0x985, /* 288-28f */
+	0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, /* 290-297 */
+	0x518, 0x519, 0x590, 0x591, 0x914, 0x915, 0x994, 0x995, /* 298-29f */
+	0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, /* 2a0-2a7 */
+	0x528, 0x529, 0x582, 0x583, 0x924, 0x925, 0x948, 0x949, /* 2a8-2af */
+	0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, /* 2b0-2b7 */
+	0x538, 0x539, 0x592, 0x593, 0x934, 0x935, 0x958, 0x959, /* 2b8-2bf */
+
+	0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, /* 2c0-2c7 */
+	0x548, 0x549, 0x584, 0x585, 0x944, 0x945, 0x588, 0x589, /* 2c8-2cf */
+	0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, /* 2d0-2d7 */
+	0x558, 0x559, 0x594, 0x595, 0x954, 0x955, 0x598, 0x599, /* 2d8-2df */
+	0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, /* 2e0-2e7 */
+	0x568, 0x569, 0x586, 0x587, 0x964, 0x965, 0x988, 0x989, /* 2e8-2ef */
+	0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, /* 2f0-2f7 */
+	0x578, 0x579, 0x596, 0x597, 0x974, 0x975, 0x998, 0x999, /* 2f8-2ff */
+
+	0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, /* 300-307 */
+	0x608, 0x609, 0x680, 0x681, 0x806, 0x807, 0x886, 0x887, /* 308-30f */
+	0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, /* 310-317 */
+	0x618, 0x619, 0x690, 0x691, 0x816, 0x817, 0x896, 0x897, /* 318-31f */
+	0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, /* 320-327 */
+	0x628, 0x629, 0x682, 0x683, 0x826, 0x827, 0x868, 0x869, /* 328-32f */
+	0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, /* 330-337 */
+	0x638, 0x639, 0x692, 0x693, 0x836, 0x837, 0x878, 0x879, /* 338-33f */
+
+	0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, /* 340-347 */
+	0x648, 0x649, 0x684, 0x685, 0x846, 0x847, 0x688, 0x689, /* 348-34f */
+	0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, /* 350-357 */
+	0x658, 0x659, 0x694, 0x695, 0x856, 0x857, 0x698, 0x699, /* 358-35f */
+	0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, /* 360-367 */
+	0x668, 0x669, 0x686, 0x687, 0x866, 0x867, 0x888, 0x889, /* 368-36f */
+	0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, /* 370-377 */
+	0x678, 0x679, 0x696, 0x697, 0x876, 0x877, 0x898, 0x899, /* 378-37f */
+
+	0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, /* 380-387 */
+	0x708, 0x709, 0x780, 0x781, 0x906, 0x907, 0x986, 0x987, /* 388-38f */
+	0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, /* 390-397 */
+	0x718, 0x719, 0x790, 0x791, 0x916, 0x917, 0x996, 0x997, /* 398-39f */
+	0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, /* 3a0-3a7 */
+	0x728, 0x729, 0x782, 0x783, 0x926, 0x927, 0x968, 0x969, /* 3a8-3af */
+	0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, /* 3b0-3b7 */
+	0x738, 0x739, 0x792, 0x793, 0x936, 0x937, 0x978, 0x979, /* 3b8-3bf */
+
+	0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, /* 3c0-3c7 */
+	0x748, 0x749, 0x784, 0x785, 0x946, 0x947, 0x788, 0x789, /* 3c8-3cf */
+	0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, /* 3d0-3d7 */
+	0x758, 0x759, 0x794, 0x795, 0x956, 0x957, 0x798, 0x799, /* 3d8-3df */
+	0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, /* 3e0-3e7 */
+	0x768, 0x769, 0x786, 0x787, 0x966, 0x967, 0x988, 0x989, /* 3e8-3ef */
+	0x770, 0x771, 0x772, 0x773, 0x974, 0x775, 0x776, 0x777, /* 3f0-3f7 */
+	0x778, 0x779, 0x796, 0x797, 0x976, 0x977, 0x998, 0x999  /* 3f8-3ff */
+	};
+
+/* Table to convert 3 Binary Coded Decimal digits (12-bits) into
+   3 Densely Packed Decimal digits (10-bits).  */
+const short int	bcd_to_dpd[2464] = {
+	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007,	/* 000-007 */
+	0x008, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 008-00f */
+	0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017,	/* 010-017 */
+	0x018, 0x019, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 018-01f */
+	0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027,	/* 020-027 */
+	0x028, 0x029, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 028-02f */
+	0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037,	/* 030-037 */
+	0x038, 0x039, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 038-03f */
+	0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047,	/* 040-047 */
+	0x048, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 048-04f */
+	0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057,	/* 050-057 */
+	0x058, 0x059, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 058-05f */
+	0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067,	/* 060-067 */
+	0x068, 0x069, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 068-06f */
+	0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077,	/* 070-077 */
+	0x078, 0x079, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 078-07f */
+	0x00a, 0x00b, 0x02a, 0x02b, 0x04a, 0x04b, 0x06a, 0x06b,	/* 080-087 */
+	0x04e, 0x04f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 088-08f */
+	0x01a, 0x01b, 0x03a, 0x03b, 0x05a, 0x05b, 0x07a, 0x07b,	/* 090-097 */
+	0x05e, 0x05f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 098-09f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0a0-0a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0a8-0af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0b0-0b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0b8-0bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0c0-0c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0c8-0cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0d0-0d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0d8-0df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0e0-0e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0e8-0ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0f0-0f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0f8-0ff */
+	0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087,	/* 100-107 */
+	0x088, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 108-10f */
+	0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097,	/* 110-117 */
+	0x098, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 118-11f */
+	0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7,	/* 120-127 */
+	0x0a8, 0x0a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 128-12f */
+	0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7,	/* 130-137 */
+	0x0b8, 0x0b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 138-13f */
+	0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7,	/* 140-147 */
+	0x0c8, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 148-14f */
+	0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7,	/* 150-157 */
+	0x0d8, 0x0d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 158-15f */
+	0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7,	/* 160-167 */
+	0x0e8, 0x0e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 168-16f */
+	0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7,	/* 170-177 */
+	0x0f8, 0x0f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 178-17f */
+	0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca, 0x0cb, 0x0ea, 0x0eb,	/* 180-187 */
+	0x0ce, 0x0cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 188-18f */
+	0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da, 0x0db, 0x0fa, 0x0fb,	/* 190-197 */
+	0x0de, 0x0df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 198-19f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1a0-1a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1a8-1af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1b0-1b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1b8-1bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1c0-1c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1c8-1cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1d0-1d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1d8-1df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1e0-1e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1e8-1ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1f0-1f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1f8-1ff */
+	0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107,	/* 200-207 */
+	0x108, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 208-20f */
+	0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117,	/* 210-217 */
+	0x118, 0x119, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 218-21f */
+	0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127,	/* 220-227 */
+	0x128, 0x129, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 228-22f */
+	0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137,	/* 230-237 */
+	0x138, 0x139, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 238-23f */
+	0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147,	/* 240-247 */
+	0x148, 0x149, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 248-24f */
+	0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157,	/* 250-257 */
+	0x158, 0x159, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 258-25f */
+	0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167,	/* 260-267 */
+	0x168, 0x169, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 268-26f */
+	0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177,	/* 270-277 */
+	0x178, 0x179, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 278-27f */
+	0x10a, 0x10b, 0x12a, 0x12b, 0x14a, 0x14b, 0x16a, 0x16b,	/* 280-287 */
+	0x14e, 0x14f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 288-28f */
+	0x11a, 0x11b, 0x13a, 0x13b, 0x15a, 0x15b, 0x17a, 0x17b,	/* 290-297 */
+	0x15e, 0x15f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 298-29f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2a0-2a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2a8-2af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2b0-2b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2b8-2bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2c0-2c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2c8-2cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2d0-2d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2d8-2df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2e0-2e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2e8-2ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2f0-2f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2f8-2ff */
+	0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187,	/* 300-307 */
+	0x188, 0x189, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 308-30f */
+	0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197,	/* 310-317 */
+	0x198, 0x199, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 318-31f */
+	0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7,	/* 320-327 */
+	0x1a8, 0x1a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 328-32f */
+	0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7,	/* 330-337 */
+	0x1b8, 0x1b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 338-33f */
+	0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7,	/* 340-347 */
+	0x1c8, 0x1c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 348-34f */
+	0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7,	/* 350-357 */
+	0x1d8, 0x1d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 358-35f */
+	0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7,	/* 360-367 */
+	0x1e8, 0x1e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 368-36f */
+	0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7,	/* 370-377 */
+	0x1f8, 0x1f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 378-37f */
+	0x18a, 0x18b, 0x1aa, 0x1ab, 0x1ca, 0x1cb, 0x1ea, 0x1eb,	/* 380-387 */
+	0x1ce, 0x1cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 388-38f */
+	0x19a, 0x19b, 0x1ba, 0x1bb, 0x1da, 0x1db, 0x1fa, 0x1fb,	/* 390-397 */
+	0x1de, 0x1df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 398-39f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3a0-3a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3a8-3af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3b0-3b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3b8-3bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3c0-3c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3c8-3cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3d0-3d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3d8-3df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3e0-3e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3e8-3ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3f0-3f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 3f8-3ff */
+	0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207,	/* 400-407 */
+	0x208, 0x209, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 408-40f */
+	0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217,	/* 410-417 */
+	0x218, 0x219, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 418-41f */
+	0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227,	/* 420-427 */
+	0x228, 0x229, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 428-42f */
+	0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237,	/* 430-437 */
+	0x238, 0x239, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 438-43f */
+	0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247,	/* 440-447 */
+	0x248, 0x249, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 448-44f */
+	0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257,	/* 450-457 */
+	0x258, 0x259, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 458-45f */
+	0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267,	/* 460-467 */
+	0x268, 0x269, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 468-46f */
+	0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277,	/* 470-477 */
+	0x278, 0x279, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 478-47f */
+	0x20a, 0x20b, 0x22a, 0x22b, 0x24a, 0x24b, 0x26a, 0x26b,	/* 480-487 */
+	0x24e, 0x24f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 488-48f */
+	0x21a, 0x21b, 0x23a, 0x23b, 0x25a, 0x25b, 0x27a, 0x27b,	/* 490-497 */
+	0x25e, 0x25f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 498-49f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4a0-4a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4a8-4af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4b0-4b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4b8-4bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4c0-4c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4c8-4cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4d0-4d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4d8-4df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4e0-4e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4e8-4ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4f0-4f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 4f8-4ff */
+	0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,	/* 500-507 */
+	0x288, 0x289, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 508-50f */
+	0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297,	/* 510-517 */
+	0x298, 0x299, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 518-51f */
+	0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7,	/* 520-527 */
+	0x2a8, 0x2a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 528-52f */
+	0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7,	/* 530-537 */
+	0x2b8, 0x2b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 538-53f */
+	0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7,	/* 540-547 */
+	0x2c8, 0x2c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 548-54f */
+	0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7,	/* 550-557 */
+	0x2d8, 0x2d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 558-55f */
+	0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7,	/* 560-567 */
+	0x2e8, 0x2e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 568-56f */
+	0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7,	/* 570-577 */
+	0x2f8, 0x2f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 578-57f */
+	0x28a, 0x28b, 0x2aa, 0x2ab, 0x2ca, 0x2cb, 0x2ea, 0x2eb,	/* 580-587 */
+	0x2ce, 0x2cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 588-58f */
+	0x29a, 0x29b, 0x2ba, 0x2bb, 0x2da, 0x2db, 0x2fa, 0x2fb,	/* 590-597 */
+	0x2de, 0x2df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 598-59f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5a0-5a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5a8-5af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5b0-5b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5b8-5bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5c0-5c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5c8-5cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5d0-5d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5d8-5df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5e0-5e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5e8-5ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5f0-5f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 5f8-5ff */
+	0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307,	/* 600-607 */
+	0x308, 0x309, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 608-60f */
+	0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317,	/* 610-617 */
+	0x318, 0x319, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 618-61f */
+	0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327,	/* 620-627 */
+	0x328, 0x329, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 628-62f */
+	0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337,	/* 630-637 */
+	0x338, 0x339, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 638-63f */
+	0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347,	/* 640-647 */
+	0x348, 0x349, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 648-64f */
+	0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357,	/* 650-657 */
+	0x358, 0x359, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 658-65f */
+	0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367,	/* 660-667 */
+	0x368, 0x369, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 668-66f */
+	0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377,	/* 670-677 */
+	0x378, 0x379, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 678-67f */
+	0x30a, 0x30b, 0x32a, 0x32b, 0x34a, 0x34b, 0x36a, 0x36b,	/* 680-687 */
+	0x34e, 0x34f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 688-68f */
+	0x31a, 0x31b, 0x33a, 0x33b, 0x35a, 0x35b, 0x37a, 0x37b,	/* 690-697 */
+	0x35e, 0x35f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 698-69f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6a0-6a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6a8-6af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6b0-6b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6b8-6bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6c0-6c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6c8-6cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6d0-6d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6d8-6df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6e0-6e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6e8-6ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6f0-6f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 6f8-6ff */
+	0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387,	/* 700-707 */
+	0x388, 0x389, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 708-70f */
+	0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397,	/* 710-717 */
+	0x398, 0x399, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 718-71f */
+	0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7,	/* 720-727 */
+	0x3a8, 0x3a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 728-72f */
+	0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7,	/* 730-737 */
+	0x3b8, 0x3b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 738-73f */
+	0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7,	/* 740-747 */
+	0x3c8, 0x3c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 748-74f */
+	0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7,	/* 750-757 */
+	0x3d8, 0x3d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 758-75f */
+	0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7,	/* 760-767 */
+	0x3e8, 0x3e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 768-76f */
+	0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x000, 0x3f5, 0x3f6, 0x3f7,	/* 770-777 */
+	0x3f8, 0x3f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 778-77f */
+	0x38a, 0x38b, 0x3aa, 0x3ab, 0x3ca, 0x3cb, 0x3ea, 0x3eb,	/* 780-787 */
+	0x3ce, 0x3cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 788-78f */
+	0x39a, 0x39b, 0x3ba, 0x3bb, 0x3da, 0x3db, 0x3fa, 0x3fb,	/* 790-797 */
+	0x3de, 0x3df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 798-79f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7a0-7a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7a8-7af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7b0-7b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7b8-7bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7c0-7c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7c8-7cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7d0-7d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7d8-7df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7e0-7e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7e8-7ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7f0-7f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 7f8-7ff */
+	0x00c, 0x00d, 0x10c, 0x10d, 0x20c, 0x20d, 0x30c, 0x30d,	/* 800-807 */
+	0x02e, 0x02f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 808-80f */
+	0x01c, 0x01d, 0x11c, 0x11d, 0x21c, 0x21d, 0x31c, 0x31d,	/* 810-817 */
+	0x03e, 0x03f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 818-81f */
+	0x02c, 0x02d, 0x12c, 0x12d, 0x22c, 0x22d, 0x32c, 0x32d,	/* 820-827 */
+	0x12e, 0x12f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 828-82f */
+	0x03c, 0x03d, 0x13c, 0x13d, 0x23c, 0x23d, 0x33c, 0x33d,	/* 830-837 */
+	0x13e, 0x13f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 838-83f */
+	0x04c, 0x04d, 0x14c, 0x14d, 0x24c, 0x24d, 0x34c, 0x34d,	/* 840-847 */
+	0x22e, 0x22f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 848-84f */
+	0x05c, 0x05d, 0x15c, 0x15d, 0x25c, 0x25d, 0x35c, 0x35d,	/* 850-857 */
+	0x23e, 0x23f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 858-85f */
+	0x06c, 0x06d, 0x16c, 0x16d, 0x26c, 0x26d, 0x36c, 0x36d,	/* 860-867 */
+	0x32e, 0x32f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 868-86f */
+	0x07c, 0x07d, 0x17c, 0x17d, 0x27c, 0x27d, 0x37c, 0x37d,	/* 870-877 */
+	0x33e, 0x33f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 878-87f */
+	0x00e, 0x00f, 0x10e, 0x10f, 0x20e, 0x20f, 0x30e, 0x30f,	/* 880-887 */
+	0x06e, 0x06f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 888-88f */
+	0x01e, 0x01f, 0x11e, 0x11f, 0x21e, 0x21f, 0x31e, 0x31f,	/* 890-897 */
+	0x07e, 0x07f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 898-89f */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8a0-8a7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8a8-8af */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8b0-8b7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8b8-8bf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8c0-8c7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8c8-8cf */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8d0-8d7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8d8-8df */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8e0-8e7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8e8-8ef */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8f0-8f7 */
+	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 8f8-8ff */
+	0x08c, 0x08d, 0x18c, 0x18d, 0x28c, 0x28d, 0x38c, 0x38d,	/* 900-907 */
+	0x0ae, 0x0af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 908-90f */
+	0x09c, 0x09d, 0x19c, 0x19d, 0x29c, 0x29d, 0x39c, 0x39d,	/* 910-917 */
+	0x0be, 0x0bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 918-91f */
+	0x0ac, 0x0ad, 0x1ac, 0x1ad, 0x2ac, 0x2ad, 0x3ac, 0x3ad,	/* 920-927 */
+	0x1ae, 0x1af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 928-92f */
+	0x0bc, 0x0bd, 0x1bc, 0x1bd, 0x2bc, 0x2bd, 0x3bc, 0x3bd,	/* 930-937 */
+	0x1be, 0x1bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 938-93f */
+	0x0cc, 0x0cd, 0x1cc, 0x1cd, 0x2cc, 0x2cd, 0x3cc, 0x3cd,	/* 940-947 */
+	0x2ae, 0x2af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 948-94f */
+	0x0dc, 0x0dd, 0x1dc, 0x1dd, 0x2dc, 0x2dd, 0x3dc, 0x3dd,	/* 950-957 */
+	0x2be, 0x2bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 958-95f */
+	0x0ec, 0x0ed, 0x1ec, 0x1ed, 0x2ec, 0x2ed, 0x3ec, 0x3ed,	/* 960-967 */
+	0x3ae, 0x3af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 968-96f */
+	0x0fc, 0x0fd, 0x1fc, 0x1fd, 0x3f4, 0x2fd, 0x3fc, 0x3fd,	/* 970-977 */
+	0x3be, 0x3bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 978-97f */
+	0x08e, 0x08f, 0x18e, 0x18f, 0x28e, 0x28f, 0x38e, 0x38f,	/* 980-987 */
+	0x0ee, 0x0ef, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 988-98f */
+	0x09e, 0x09f, 0x19e, 0x19f, 0x29e, 0x29f, 0x39e, 0x39f,	/* 990-997 */
+	0x0fe, 0x0ff, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 998-99f */
+
+};
+
+void 
+__get_dpd_digits (int bits, const void *const *args, 
+char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p)
+{
+
+  int exp;
+  struct ieee754r_c_field c_f;
+if (bits == 32) 
+{
+  union ieee754r_Decimal32 d;
+  d.sd = *(_Decimal32*)args[0];
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL32_Bias;
+
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
+  str[7] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+}
+else if (bits == 64) 
+{
+  union ieee754r_Decimal64 d;
+  d.dd = *(_Decimal64*)args[0];
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL64_Bias;
+
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  /* Packed fields crossing a word boundary require special handling. */
+  __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
+  __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+  __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+  __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
+  str[16] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+}
+else if (bits == 128) 
+{
+  union ieee754r_Decimal128 d;
+  d.td = *(_Decimal128*)args[0];
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL128_Bias;
+
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  /* Packed fields crossing a word boundary require special handling. */
+  __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
+  __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+  __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+  __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
+  __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
+  __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
+  __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
+  __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
+  __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
+  __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
+  str[34] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+}
+
+  str[0] = '0' + c_f.lmd;
+  if (exp_p) *exp_p = exp;
+  if (nan_p) *nan_p = c_f.is_nan;
+  if (inf_p) *inf_p = c_f.is_inf;
+  
+}
+
+void 
+__get_digits_d32 (_Decimal32 x, char *str, int *exp_p, int *sign_p, 
+		  int *nan_p, int *inf_p)
+{
+  int exp;
+  struct ieee754r_c_field c_f;
+  union ieee754r_Decimal32 d;
+  d.sd = x;
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL32_Bias;
+
+  str[0] = '0' + c_f.lmd;
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
+  str[7] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+  if (exp_p) *exp_p = exp;
+  if (nan_p) *nan_p = c_f.is_nan;
+  if (inf_p) *inf_p = c_f.is_inf;
+  
+}
+
+void 
+__get_digits_d64 (_Decimal64 x, char *str, int *exp_p, int *sign_p, 
+		  int *nan_p, int *inf_p)
+{
+  int exp;
+  struct ieee754r_c_field c_f;
+  union ieee754r_Decimal64 d;
+  d.dd = x;
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL64_Bias;
+
+  str[0] = '0' + c_f.lmd;
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  /* Packed fields crossing a word boundary require special handling. */
+  __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
+  __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+  __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+  __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
+  str[16] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+  if (exp_p) *exp_p = exp;
+  if (nan_p) *nan_p = c_f.is_nan;
+  if (inf_p) *inf_p = c_f.is_inf;
+  
+}
+
+void 
+__get_digits_d128 (_Decimal128 x, char *str, int *exp_p, int *sign_p, 
+		   int *nan_p, int *inf_p)
+{
+  int exp;
+  struct ieee754r_c_field c_f;
+  union ieee754r_Decimal128 d;
+  d.td = x;
+  c_f =  c_decoder[d.ieee.c];
+  exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+  exp += d.ieee.bec;
+  exp -= DECIMAL128_Bias;
+
+  str[0] = '0' + c_f.lmd;
+  __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+  /* Packed fields crossing a word boundary require special handling. */
+  __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
+  __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+  __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+  __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
+  __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
+  __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
+  __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
+  __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
+  __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
+  __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
+  str[34] = '\0';
+  if (sign_p) *sign_p = d.ieee.negative;
+  if (exp_p) *exp_p = exp;
+  if (nan_p) *nan_p = c_f.is_nan;
+  if (inf_p) *inf_p = c_f.is_inf;
+  
+}
+

Modified: branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.h
==============================================================================
--- branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.h (original)
+++ branches/libdfp/libc/dfp/sysdeps/powerpc/dpd-private.h Mon Mar 31 15:12:46 2008
@@ -21,6 +21,8 @@
 
 #ifndef _DPD_PRIVATE_H
 #define _DPD_PRIVATE_H 1
+
+#include <endian.h>
 
 /* copy the declet in the 'declet' param to the string in the 'str' param.  */
 static inline void __dfp_cpydeclet(char * str, const char * declet)
@@ -294,640 +296,14 @@
     unsigned int lmd:4;
   };
 
-const struct ieee754r_c_field c_decoder[32] = {
-	{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3},	/* 00000-00011 */
-	{0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7},	/* 00100-00111 */
-	{0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3},	/* 01000-01011 */
-	{0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7},	/* 01100-01111 */
-	{0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3},	/* 10000-10011 */
-	{0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7},	/* 10100-10111 */
-	{0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9},	/* 11000-11011 */
-	{0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0}	/* 11100-11111 */
-	};
-
-/* Table to encode the "left most" 2 bits of the biased exponent and the
-   "Left Most Digit" into the "C"ombination field.  Indexed by [lmd,lm2bits].  */
-const unsigned char lm2lmd_to_c[10][3] = {
-    {0x00, 0x08, 0x10}, 
-    {0x01, 0x09, 0x11},
-    {0x02, 0x0a, 0x12},
-    {0x03, 0x0b, 0x13},
-    {0x04, 0x0c, 0x14},
-    {0x05, 0x0d, 0x15},
-    {0x06, 0x0e, 0x16},
-    {0x07, 0x0f, 0x17},
-    {0x18, 0x1a, 0x1c},
-    {0x19, 0x1b, 0x1d}};  
-
-/* Table to convert 3 Densely Packed Decimal digits (10-bits) into
-   3 ASCII digits (24-bits, 3 bytes).  */
-const char	dpd_to_char[1024][4] = {
-	"000", "001", "002", "003", "004", "005", "006", "007", /* 000-007 */
-	"008", "009", "080", "081", "800", "801", "880", "881", /* 008-00f */
-	"010", "011", "012", "013", "014", "015", "016", "017", /* 010-017 */
-	"018", "019", "090", "091", "810", "811", "890", "891", /* 018-01f */
-	"020", "021", "022", "023", "024", "025", "026", "027", /* 020-027 */
-	"028", "029", "082", "083", "820", "821", "808", "809", /* 028-02f */
-	"030", "031", "032", "033", "034", "035", "036", "037", /* 030-037 */
-	"038", "039", "092", "093", "830", "831", "818", "819", /* 038-03f */
-
-	"040", "041", "042", "043", "044", "045", "046", "047", /* 040-047 */
-	"048", "049", "084", "085", "840", "841", "088", "089", /* 048-04f */
-	"050", "051", "052", "053", "054", "055", "056", "057", /* 050-057 */
-	"058", "059", "094", "095", "850", "851", "098", "099", /* 058-05f */
-	"060", "061", "062", "063", "064", "065", "066", "067", /* 060-067 */
-	"068", "069", "086", "087", "860", "861", "888", "889", /* 068-06f */
-	"070", "071", "072", "073", "074", "075", "076", "077", /* 070-077 */
-	"078", "079", "096", "097", "870", "871", "898", "899", /* 078-07f */
-
-	"100", "101", "102", "103", "104", "105", "106", "107", /* 080-087 */
-	"108", "109", "180", "181", "900", "901", "980", "981", /* 088-08f */
-	"110", "111", "112", "113", "114", "115", "116", "117", /* 090-097 */
-	"118", "119", "190", "191", "910", "911", "990", "991", /* 098-09f */
-	"120", "121", "122", "123", "124", "125", "126", "127", /* 0a0-0a7 */
-	"128", "129", "182", "183", "920", "921", "908", "909", /* 0a8-0af */
-	"130", "131", "132", "133", "134", "135", "136", "137", /* 0b0-0b7 */
-	"138", "139", "192", "193", "930", "931", "918", "919", /* 0b8-0bf */
-
-	"140", "141", "142", "143", "144", "145", "146", "147", /* 0c0-0c7 */
-	"148", "149", "184", "185", "940", "941", "188", "189", /* 0c8-0cf */
-	"150", "151", "152", "153", "154", "155", "156", "157", /* 0d0-0d7 */
-	"158", "159", "194", "195", "950", "951", "198", "199", /* 0d8-0df */
-	"160", "161", "162", "163", "164", "165", "166", "167", /* 0e0-0e7 */
-	"168", "169", "186", "187", "960", "961", "988", "989", /* 0e8-0ef */
-	"170", "171", "172", "173", "174", "175", "176", "177", /* 0f0-0f7 */
-	"178", "179", "196", "197", "970", "971", "998", "999", /* 0f8-0ff */
-
-	"200", "201", "202", "203", "204", "205", "206", "207", /* 100-107 */
-	"208", "209", "280", "281", "802", "803", "882", "883", /* 108-10f */
-	"210", "211", "212", "213", "214", "215", "216", "217", /* 110-117 */
-	"218", "219", "290", "291", "812", "813", "892", "893", /* 118-11f */
-	"220", "221", "222", "223", "224", "225", "226", "227", /* 120-127 */
-	"228", "229", "282", "283", "822", "823", "828", "829", /* 128-12f */
-	"230", "231", "232", "233", "234", "235", "236", "237", /* 130-137 */
-	"238", "239", "292", "293", "832", "833", "838", "839", /* 138-13f */
-
-	"240", "241", "242", "243", "244", "245", "246", "247", /* 140-147 */
-	"248", "249", "284", "285", "842", "843", "288", "289", /* 148-14f */
-	"250", "251", "252", "253", "254", "255", "256", "257", /* 150-157 */
-	"258", "259", "294", "295", "852", "853", "298", "299", /* 158-15f */
-	"260", "261", "262", "263", "264", "265", "266", "267", /* 160-167 */
-	"268", "269", "286", "287", "862", "863", "888", "889", /* 168-16f */
-	"270", "271", "272", "273", "274", "275", "276", "277", /* 170-177 */
-	"278", "279", "296", "297", "872", "873", "898", "899", /* 178-17f */
-
-	"300", "301", "302", "303", "304", "305", "306", "307", /* 180-187 */
-	"308", "309", "380", "381", "902", "903", "982", "983", /* 188-18f */
-	"310", "311", "312", "313", "314", "315", "316", "317", /* 190-197 */
-	"318", "319", "390", "391", "912", "913", "992", "993", /* 198-19f */
-	"320", "321", "322", "323", "324", "325", "326", "327", /* 1a0-1a7 */
-	"328", "329", "382", "383", "922", "923", "928", "929", /* 1a8-1af */
-	"330", "331", "332", "333", "334", "335", "336", "337", /* 1b0-1b7 */
-	"338", "339", "392", "393", "932", "933", "938", "939", /* 1b8-1bf */
-
-	"340", "341", "342", "343", "344", "345", "346", "347", /* 1c0-1c7 */
-	"348", "349", "384", "385", "942", "943", "388", "389", /* 1c8-1cf */
-	"350", "351", "352", "353", "354", "355", "356", "357", /* 1d0-1d7 */
-	"358", "359", "394", "395", "952", "953", "398", "399", /* 1d8-1df */
-	"360", "361", "362", "363", "364", "365", "366", "367", /* 1e0-1e7 */
-	"368", "369", "386", "387", "962", "963", "988", "989", /* 1e8-1ef */
-	"370", "371", "372", "373", "374", "375", "376", "377", /* 1f0-1f7 */
-	"378", "379", "396", "397", "972", "973", "998", "999", /* 1f8-1ff */
-
-	"400", "401", "402", "403", "404", "405", "406", "407", /* 200-207 */
-	"408", "409", "480", "481", "804", "805", "884", "885", /* 208-20f */
-	"410", "411", "412", "413", "414", "415", "416", "417", /* 210-217 */
-	"418", "419", "490", "491", "814", "815", "894", "895", /* 218-21f */
-	"420", "421", "422", "423", "424", "425", "426", "427", /* 220-227 */
-	"428", "429", "482", "483", "824", "825", "848", "849", /* 228-22f */
-	"430", "431", "432", "433", "434", "435", "436", "437", /* 230-237 */
-	"438", "439", "492", "493", "834", "835", "858", "859", /* 238-23f */
-
-	"440", "441", "442", "443", "444", "445", "446", "447", /* 240-247 */
-	"448", "449", "484", "485", "844", "845", "488", "489", /* 248-24f */
-	"450", "451", "452", "453", "454", "455", "456", "457", /* 250-257 */
-	"458", "459", "494", "495", "854", "855", "498", "499", /* 258-25f */
-	"460", "461", "462", "463", "464", "465", "466", "467", /* 260-267 */
-	"468", "469", "486", "487", "864", "865", "888", "889", /* 268-26f */
-	"470", "471", "472", "473", "474", "475", "476", "477", /* 270-277 */
-	"478", "479", "496", "497", "874", "875", "898", "899", /* 278-27f */
-
-	"500", "501", "502", "503", "504", "505", "506", "507", /* 280-287 */
-	"508", "509", "580", "581", "904", "905", "984", "985", /* 288-28f */
-	"510", "511", "512", "513", "514", "515", "516", "517", /* 290-297 */
-	"518", "519", "590", "591", "914", "915", "994", "995", /* 298-29f */
-	"520", "521", "522", "523", "524", "525", "526", "527", /* 2a0-2a7 */
-	"528", "529", "582", "583", "924", "925", "948", "949", /* 2a8-2af */
-	"530", "531", "532", "533", "534", "535", "536", "537", /* 2b0-2b7 */
-	"538", "539", "592", "593", "934", "935", "958", "959", /* 2b8-2bf */
-
-	"540", "541", "542", "543", "544", "545", "546", "547", /* 2c0-2c7 */
-	"548", "549", "584", "585", "944", "945", "588", "589", /* 2c8-2cf */
-	"550", "551", "552", "553", "554", "555", "556", "557", /* 2d0-2d7 */
-	"558", "559", "594", "595", "954", "955", "598", "599", /* 2d8-2df */
-	"560", "561", "562", "563", "564", "565", "566", "567", /* 2e0-2e7 */
-	"568", "569", "586", "587", "964", "965", "988", "989", /* 2e8-2ef */
-	"570", "571", "572", "573", "574", "575", "576", "577", /* 2f0-2f7 */
-	"578", "579", "596", "597", "974", "975", "998", "999", /* 2f8-2ff */
-
-	"600", "601", "602", "603", "604", "605", "606", "607", /* 300-307 */
-	"608", "609", "680", "681", "806", "807", "886", "887", /* 308-30f */
-	"610", "611", "612", "613", "614", "615", "616", "617", /* 310-317 */
-	"618", "619", "690", "691", "816", "817", "896", "897", /* 318-31f */
-	"620", "621", "622", "623", "624", "625", "626", "627", /* 320-327 */
-	"628", "629", "682", "683", "826", "827", "868", "869", /* 328-32f */
-	"630", "631", "632", "633", "634", "635", "636", "637", /* 330-337 */
-	"638", "639", "692", "693", "836", "837", "878", "879", /* 338-33f */
-
-	"640", "641", "642", "643", "644", "645", "646", "647", /* 340-347 */
-	"648", "649", "684", "685", "846", "847", "688", "689", /* 348-34f */
-	"650", "651", "652", "653", "654", "655", "656", "657", /* 350-357 */
-	"658", "659", "694", "695", "856", "857", "698", "699", /* 358-35f */
-	"660", "661", "662", "663", "664", "665", "666", "667", /* 360-367 */
-	"668", "669", "686", "687", "866", "867", "888", "889", /* 368-36f */
-	"670", "671", "672", "673", "674", "675", "676", "677", /* 370-377 */
-	"678", "679", "696", "697", "876", "877", "898", "899", /* 378-37f */
-
-	"700", "701", "702", "703", "704", "705", "706", "707", /* 380-387 */
-	"708", "709", "780", "781", "906", "907", "986", "987", /* 388-38f */
-	"710", "711", "712", "713", "714", "715", "716", "717", /* 390-397 */
-	"718", "719", "790", "791", "916", "917", "996", "997", /* 398-39f */
-	"720", "721", "722", "723", "724", "725", "726", "727", /* 3a0-3a7 */
-	"728", "729", "782", "783", "926", "927", "968", "969", /* 3a8-3af */
-	"730", "731", "732", "733", "734", "735", "736", "737", /* 3b0-3b7 */
-	"738", "739", "792", "793", "936", "937", "978", "979", /* 3b8-3bf */
-
-	"740", "741", "742", "743", "744", "745", "746", "747", /* 3c0-3c7 */
-	"748", "749", "784", "785", "946", "947", "788", "789", /* 3c8-3cf */
-	"750", "751", "752", "753", "754", "755", "756", "757", /* 3d0-3d7 */
-	"758", "759", "794", "795", "956", "957", "798", "799", /* 3d8-3df */
-	"760", "761", "762", "763", "764", "765", "766", "767", /* 3e0-3e7 */
-	"768", "769", "786", "787", "966", "967", "988", "989", /* 3e8-3ef */
-	"770", "771", "772", "773", "974", "775", "776", "777", /* 3f0-3f7 */
-	"778", "779", "796", "797", "976", "977", "998", "999"  /* 3f8-3ff */
-	};
-
-/* Table to convert 3 Densely Packed Decimal digits (10-bits) into
-   3 Binary coded Decimal digits (12-bits).  */
-const short int	dpd_to_bcd[1024] = {
-	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
-	0x008, 0x009, 0x080, 0x081, 0x800, 0x801, 0x880, 0x881, /* 008-00f */
-	0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
-	0x018, 0x019, 0x090, 0x091, 0x810, 0x811, 0x890, 0x891, /* 018-01f */
-	0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
-	0x028, 0x029, 0x082, 0x083, 0x820, 0x821, 0x808, 0x809, /* 028-02f */
-	0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
-	0x038, 0x039, 0x092, 0x093, 0x830, 0x831, 0x818, 0x819, /* 038-03f */
-
-	0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
-	0x048, 0x049, 0x084, 0x085, 0x840, 0x841, 0x088, 0x089, /* 048-04f */
-	0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
-	0x058, 0x059, 0x094, 0x095, 0x850, 0x851, 0x098, 0x099, /* 058-05f */
-	0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
-	0x068, 0x069, 0x086, 0x087, 0x860, 0x861, 0x888, 0x889, /* 068-06f */
-	0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
-	0x078, 0x079, 0x096, 0x097, 0x870, 0x871, 0x898, 0x899, /* 078-07f */
-
-	0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 080-087 */
-	0x108, 0x109, 0x180, 0x181, 0x900, 0x901, 0x980, 0x981, /* 088-08f */
-	0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 090-097 */
-	0x118, 0x119, 0x190, 0x191, 0x910, 0x911, 0x990, 0x991, /* 098-09f */
-	0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 0a0-0a7 */
-	0x128, 0x129, 0x182, 0x183, 0x920, 0x921, 0x908, 0x909, /* 0a8-0af */
-	0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 0b0-0b7 */
-	0x138, 0x139, 0x192, 0x193, 0x930, 0x931, 0x918, 0x919, /* 0b8-0bf */
-
-	0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 0c0-0c7 */
-	0x148, 0x149, 0x184, 0x185, 0x940, 0x941, 0x188, 0x189, /* 0c8-0cf */
-	0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 0d0-0d7 */
-	0x158, 0x159, 0x194, 0x195, 0x950, 0x951, 0x198, 0x199, /* 0d8-0df */
-	0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 0e0-0e7 */
-	0x168, 0x169, 0x186, 0x187, 0x960, 0x961, 0x988, 0x989, /* 0e8-0ef */
-	0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 0f0-0f7 */
-	0x178, 0x179, 0x196, 0x197, 0x970, 0x971, 0x998, 0x999, /* 0f8-0ff */
-
-	0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 100-107 */
-	0x208, 0x209, 0x280, 0x281, 0x802, 0x803, 0x882, 0x883, /* 108-10f */
-	0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 110-117 */
-	0x218, 0x219, 0x290, 0x291, 0x812, 0x813, 0x892, 0x893, /* 118-11f */
-	0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 120-127 */
-	0x228, 0x229, 0x282, 0x283, 0x822, 0x823, 0x828, 0x829, /* 128-12f */
-	0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 130-137 */
-	0x238, 0x239, 0x292, 0x293, 0x832, 0x833, 0x838, 0x839, /* 138-13f */
-
-	0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 140-147 */
-	0x248, 0x249, 0x284, 0x285, 0x842, 0x843, 0x288, 0x289, /* 148-14f */
-	0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 150-157 */
-	0x258, 0x259, 0x294, 0x295, 0x852, 0x853, 0x298, 0x299, /* 158-15f */
-	0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 160-167 */
-	0x268, 0x269, 0x286, 0x287, 0x862, 0x863, 0x888, 0x889, /* 168-16f */
-	0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 170-177 */
-	0x278, 0x279, 0x296, 0x297, 0x872, 0x873, 0x898, 0x899, /* 178-17f */
-
-	0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 180-187 */
-	0x308, 0x309, 0x380, 0x381, 0x902, 0x903, 0x982, 0x983, /* 188-18f */
-	0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 190-197 */
-	0x318, 0x319, 0x390, 0x391, 0x912, 0x913, 0x992, 0x993, /* 198-19f */
-	0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 1a0-1a7 */
-	0x328, 0x329, 0x382, 0x383, 0x922, 0x923, 0x928, 0x929, /* 1a8-1af */
-	0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 1b0-1b7 */
-	0x338, 0x339, 0x392, 0x393, 0x932, 0x933, 0x938, 0x939, /* 1b8-1bf */
-
-	0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 1c0-1c7 */
-	0x348, 0x349, 0x384, 0x385, 0x942, 0x943, 0x388, 0x389, /* 1c8-1cf */
-	0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 1d0-1d7 */
-	0x358, 0x359, 0x394, 0x395, 0x952, 0x953, 0x398, 0x399, /* 1d8-1df */
-	0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 1e0-1e7 */
-	0x368, 0x369, 0x386, 0x387, 0x962, 0x963, 0x988, 0x989, /* 1e8-1ef */
-	0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 1f0-1f7 */
-	0x378, 0x379, 0x396, 0x397, 0x972, 0x973, 0x998, 0x999, /* 1f8-1ff */
-
-	0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, /* 200-207 */
-	0x408, 0x409, 0x480, 0x481, 0x804, 0x805, 0x884, 0x885, /* 208-20f */
-	0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, /* 210-217 */
-	0x418, 0x419, 0x490, 0x491, 0x814, 0x815, 0x894, 0x895, /* 218-21f */
-	0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, /* 220-227 */
-	0x428, 0x429, 0x482, 0x483, 0x824, 0x825, 0x848, 0x849, /* 228-22f */
-	0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, /* 230-237 */
-	0x438, 0x439, 0x492, 0x493, 0x834, 0x835, 0x858, 0x859, /* 238-23f */
-
-	0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, /* 240-247 */
-	0x448, 0x449, 0x484, 0x485, 0x844, 0x845, 0x488, 0x489, /* 248-24f */
-	0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, /* 250-257 */
-	0x458, 0x459, 0x494, 0x495, 0x854, 0x855, 0x498, 0x499, /* 258-25f */
-	0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, /* 260-267 */
-	0x468, 0x469, 0x486, 0x487, 0x864, 0x865, 0x888, 0x889, /* 268-26f */
-	0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, /* 270-277 */
-	0x478, 0x479, 0x496, 0x497, 0x874, 0x875, 0x898, 0x899, /* 278-27f */
-
-	0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, /* 280-287 */
-	0x508, 0x509, 0x580, 0x581, 0x904, 0x905, 0x984, 0x985, /* 288-28f */
-	0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, /* 290-297 */
-	0x518, 0x519, 0x590, 0x591, 0x914, 0x915, 0x994, 0x995, /* 298-29f */
-	0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, /* 2a0-2a7 */
-	0x528, 0x529, 0x582, 0x583, 0x924, 0x925, 0x948, 0x949, /* 2a8-2af */
-	0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, /* 2b0-2b7 */
-	0x538, 0x539, 0x592, 0x593, 0x934, 0x935, 0x958, 0x959, /* 2b8-2bf */
-
-	0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, /* 2c0-2c7 */
-	0x548, 0x549, 0x584, 0x585, 0x944, 0x945, 0x588, 0x589, /* 2c8-2cf */
-	0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, /* 2d0-2d7 */
-	0x558, 0x559, 0x594, 0x595, 0x954, 0x955, 0x598, 0x599, /* 2d8-2df */
-	0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, /* 2e0-2e7 */
-	0x568, 0x569, 0x586, 0x587, 0x964, 0x965, 0x988, 0x989, /* 2e8-2ef */
-	0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, /* 2f0-2f7 */
-	0x578, 0x579, 0x596, 0x597, 0x974, 0x975, 0x998, 0x999, /* 2f8-2ff */
-
-	0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, /* 300-307 */
-	0x608, 0x609, 0x680, 0x681, 0x806, 0x807, 0x886, 0x887, /* 308-30f */
-	0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, /* 310-317 */
-	0x618, 0x619, 0x690, 0x691, 0x816, 0x817, 0x896, 0x897, /* 318-31f */
-	0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, /* 320-327 */
-	0x628, 0x629, 0x682, 0x683, 0x826, 0x827, 0x868, 0x869, /* 328-32f */
-	0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, /* 330-337 */
-	0x638, 0x639, 0x692, 0x693, 0x836, 0x837, 0x878, 0x879, /* 338-33f */
-
-	0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, /* 340-347 */
-	0x648, 0x649, 0x684, 0x685, 0x846, 0x847, 0x688, 0x689, /* 348-34f */
-	0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, /* 350-357 */
-	0x658, 0x659, 0x694, 0x695, 0x856, 0x857, 0x698, 0x699, /* 358-35f */
-	0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, /* 360-367 */
-	0x668, 0x669, 0x686, 0x687, 0x866, 0x867, 0x888, 0x889, /* 368-36f */
-	0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, /* 370-377 */
-	0x678, 0x679, 0x696, 0x697, 0x876, 0x877, 0x898, 0x899, /* 378-37f */
-
-	0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, /* 380-387 */
-	0x708, 0x709, 0x780, 0x781, 0x906, 0x907, 0x986, 0x987, /* 388-38f */
-	0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, /* 390-397 */
-	0x718, 0x719, 0x790, 0x791, 0x916, 0x917, 0x996, 0x997, /* 398-39f */
-	0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, /* 3a0-3a7 */
-	0x728, 0x729, 0x782, 0x783, 0x926, 0x927, 0x968, 0x969, /* 3a8-3af */
-	0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, /* 3b0-3b7 */
-	0x738, 0x739, 0x792, 0x793, 0x936, 0x937, 0x978, 0x979, /* 3b8-3bf */
-
-	0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, /* 3c0-3c7 */
-	0x748, 0x749, 0x784, 0x785, 0x946, 0x947, 0x788, 0x789, /* 3c8-3cf */
-	0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, /* 3d0-3d7 */
-	0x758, 0x759, 0x794, 0x795, 0x956, 0x957, 0x798, 0x799, /* 3d8-3df */
-	0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, /* 3e0-3e7 */
-	0x768, 0x769, 0x786, 0x787, 0x966, 0x967, 0x988, 0x989, /* 3e8-3ef */
-	0x770, 0x771, 0x772, 0x773, 0x974, 0x775, 0x776, 0x777, /* 3f0-3f7 */
-	0x778, 0x779, 0x796, 0x797, 0x976, 0x977, 0x998, 0x999  /* 3f8-3ff */
-	};
-
-/* Table to convert 3 Binary Coded Decimal digits (12-bits) into
-   3 Densely Packed Decimal digits (10-bits).  */
-const short int	bcd_to_dpd[2464] = {
-	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007,	/* 000-007 */
-	0x008, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 008-00f */
-	0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017,	/* 010-017 */
-	0x018, 0x019, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 018-01f */
-	0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027,	/* 020-027 */
-	0x028, 0x029, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 028-02f */
-	0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037,	/* 030-037 */
-	0x038, 0x039, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 038-03f */
-	0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047,	/* 040-047 */
-	0x048, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 048-04f */
-	0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057,	/* 050-057 */
-	0x058, 0x059, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 058-05f */
-	0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067,	/* 060-067 */
-	0x068, 0x069, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 068-06f */
-	0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077,	/* 070-077 */
-	0x078, 0x079, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 078-07f */
-	0x00a, 0x00b, 0x02a, 0x02b, 0x04a, 0x04b, 0x06a, 0x06b,	/* 080-087 */
-	0x04e, 0x04f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 088-08f */
-	0x01a, 0x01b, 0x03a, 0x03b, 0x05a, 0x05b, 0x07a, 0x07b,	/* 090-097 */
-	0x05e, 0x05f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 098-09f */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0a0-0a7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0a8-0af */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0b0-0b7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0b8-0bf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0c0-0c7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0c8-0cf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0d0-0d7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0d8-0df */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0e0-0e7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0e8-0ef */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0f0-0f7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 0f8-0ff */
-	0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087,	/* 100-107 */
-	0x088, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 108-10f */
-	0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097,	/* 110-117 */
-	0x098, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 118-11f */
-	0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7,	/* 120-127 */
-	0x0a8, 0x0a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 128-12f */
-	0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7,	/* 130-137 */
-	0x0b8, 0x0b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 138-13f */
-	0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7,	/* 140-147 */
-	0x0c8, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 148-14f */
-	0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7,	/* 150-157 */
-	0x0d8, 0x0d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 158-15f */
-	0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7,	/* 160-167 */
-	0x0e8, 0x0e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 168-16f */
-	0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7,	/* 170-177 */
-	0x0f8, 0x0f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 178-17f */
-	0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca, 0x0cb, 0x0ea, 0x0eb,	/* 180-187 */
-	0x0ce, 0x0cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 188-18f */
-	0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da, 0x0db, 0x0fa, 0x0fb,	/* 190-197 */
-	0x0de, 0x0df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 198-19f */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1a0-1a7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1a8-1af */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1b0-1b7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1b8-1bf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1c0-1c7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1c8-1cf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1d0-1d7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1d8-1df */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1e0-1e7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1e8-1ef */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1f0-1f7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 1f8-1ff */
-	0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107,	/* 200-207 */
-	0x108, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 208-20f */
-	0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117,	/* 210-217 */
-	0x118, 0x119, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 218-21f */
-	0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127,	/* 220-227 */
-	0x128, 0x129, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 228-22f */
-	0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137,	/* 230-237 */
-	0x138, 0x139, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 238-23f */
-	0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147,	/* 240-247 */
-	0x148, 0x149, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 248-24f */
-	0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157,	/* 250-257 */
-	0x158, 0x159, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 258-25f */
-	0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167,	/* 260-267 */
-	0x168, 0x169, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 268-26f */
-	0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177,	/* 270-277 */
-	0x178, 0x179, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 278-27f */
-	0x10a, 0x10b, 0x12a, 0x12b, 0x14a, 0x14b, 0x16a, 0x16b,	/* 280-287 */
-	0x14e, 0x14f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 288-28f */
-	0x11a, 0x11b, 0x13a, 0x13b, 0x15a, 0x15b, 0x17a, 0x17b,	/* 290-297 */
-	0x15e, 0x15f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 298-29f */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2a0-2a7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2a8-2af */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2b0-2b7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2b8-2bf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2c0-2c7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2c8-2cf */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2d0-2d7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2d8-2df */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2e0-2e7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2e8-2ef */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2f0-2f7 */
-	0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 2f8-2ff */
-	0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187,	/* 300-307 */
-	0x188, 0x189, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 308-30f */
-	0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197,	/* 310-317 */
-	0x198, 0x199, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 318-31f */
-	0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7,	/* 320-327 */
-	0x1a8, 0x1a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 328-32f */
-	0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7,	/* 330-337 */
-	0x1b8, 0x1b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 338-33f */
-	0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7,	/* 340-347 */
-	0x1c8, 0x1c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 348-34f */
-	0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7,	/* 350-357 */
-	0x1d8, 0x1d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 358-35f */
-	0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7,	/* 360-367 */
-	0x1e8, 0x1e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,	/* 368-36f */

[... 480 lines stripped ...]